たとえば、次の構造体では:
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_
問題は、この構造のハッシュ関数をどのように設計するかです。ガイドラインはありますか?
ハッシュ関数に衝突がないことを確認するにはどうすればよいですか?