나는 소수의 다른 소수 (테이블 크기)를 곱하는 간단한 해쉬 함수를 비교하고있다. stl은 100 배 느리다. 이것은 내가 쓴 테스트 방법 :stl hash_map 단순 해시 함수보다 느림?
이stdext:: hash_map<string, int> hashDict;
for (int l = 0; l < size; ++l){
hashDict[arr[l]] = l;
}
long int before3 = GetTickCount();
int c = 0;
while (c < size){
hashDict[arr[c]];
c++;
}
long int after3 = GetTickCount();
cout << "for stl class, the time is " << (after3 - before3)/1000.0 << '\n';
cout << "the average is " << ((after3 - before3)/1000.0) /long (size) << '\n';
사전의 크기는 약 200K 요소와 내가 쓴 해시 함수의 테이블 크기는 3m 항목, 그래서 어쩌면의 테이블 크기와 상관이있다 stl 클래스는 매우 작습니다. 누구든지 stl 함수의 tablesize와 collision rates.etc를 알고 있습니까?
이 내 해시 함수입니다 : 서명되지 않은 해시 (CONST의 char * s의) { \t 부호 hashval; \t (hashval = 0; * s! = '\ 0'; s ++) \t \t hashval = * s + PRIME * hashval; \t 돌아 가기 hashval % 해시; } – SuperString
이 정보는 실제로 더 많은 정보가 필요합니다. 당신의 간단한 해쉬 함수는 무엇이며, 그것은 무엇을 하는가? 또한,'hash_map '구현에 대해 이야기하고있는 것은 무엇입니까? STL에는 하나도 없다 ('std :: unordered_map <>'이있을 것이다). 마지막으로 제공된 코드에서 해시를 사용하지 않습니다. 당신의 버전이 전혀 아무것도하고 있지 않습니까? –
지도에서 요소를 검색하는 중일뿐입니다. – SuperString