例如,在以下结构中:
1) editLine 是指向具有 CLRF 的数据行的指针,
2) nDisplayLine 是此 editLine 的显示行索引,
3) start 是显示行中的偏移量,
4) len 是文本的长度;
struct CacheKey {
const CEditLine* editLine;
int32 nDisplayLine;
int32 start;
int32 len;
friend bool operator==(const CacheKey& item1, const CacheKey& item2) {
return (item1.start == item2.start && item1.len == item2.len && item1.nDisplayLine == item2.nDisplayLine &&
item1.editLine == item2.editLine);
}
CacheKey() {
editLine = NULL;
nDisplayLine = 0;
start = 0;
len = 0;
}
CacheKey(const CEditLine* editLine, int32 dispLine, int32 start, int32 len) :
editLine(editLine), nDisplayLine(dispLine), start(start), len(len)
{
}
int hash() {
return (int)((unsigned char*)editLine - 0x10000) + nDisplayLine * nDisplayLine + start * 2 - len * 1000;
}
};
现在我需要把它放到一个std::unordered_map<int, CacheItem> cacheMap_
问题是如何设计这种结构的散列函数,有什么指导方针吗?
我怎样才能确保哈希函数是无冲突的?