다음 구조체의 경우 :사용자 정의 유형에 해시 함수를 구성하는 방법은 무엇입니까? 예를 들어
1) editLine는 CLRF되어있는 데이터 선에 대한 포인터이다
2) nDisplayLine는
3) 시작은 오프셋이 editLine의 표시 라인 인덱스이며 디스플레이 라인에서
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_
에 넣어 필요가있는 가이드 라인이있다?
어떻게 해시 함수가 충돌 없는지 확인할 수 있습니까?
"어떻게 해시 함수가 충돌하지 않는지 확인할 수 있습니까?"- 그렇지 않습니다. 해시 함수는 충돌이없는 것으로 간주되지 않습니다. –