Je comparais une simple fonction de hachage que j'écrivais et que je multiplie juste par un mod premier autre nombre premier (la taille de la table) et il s'avère que stl est plus lent de 100 fois. Ceci est la méthode d'essai que j'ai écrit:stl hash_map plus lent que la simple fonction de hachage?
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';
La taille du dictionnaire est d'environ 200K éléments et la taille de la table de la fonction de hachage j'ai écrit a entrées 3m, alors peut-être qu'elle a à voir avec la taille de table la classe stl étant très petite. Est-ce que quelqu'un sait ce que la tableize de la fonction stl est et les taux de collision.etc?
C'est ma fonction de hachage: hachage non signé (const char * s) { \t de hashval non signé; \t pour (hashval = 0; * s! = '\ 0'; s ++) \t \t hashval = * s + PRIME * hashval; \t return hashval% HASHSIZE; } – SuperString
Cela a vraiment, vraiment besoin de plus d'informations pour répondre. Quelle est votre fonction de hachage simple, et que fait-elle? De plus, de quelle implémentation 'hash_map' parlez-vous? Il n'y en a pas dans la STL (il y aura un 'std :: unordered_map <>'). Enfin, vous ne faites rien avec le hachage dans le code fourni; êtes-vous sûr que votre version fait quoi que ce soit? –
Je récupère juste les éléments de la carte, ne faisant rien avec. – SuperString