2013-08-02 4 views
2

Pourquoi ai-je besoin d'implémenter à la fois l'opérateur == et un opérateur aléatoire retournant un size_t? Et que devrait renvoyer la méthode return size_t?Pourquoi un opérateur == n'est pas suffisant pour std :: unordered_map? - C++

EDIT: Lorsque j'ai dit opérateur aléatoire, je ne voulais pas dire qu'il n'avait pas d'utilité. Ce que je voulais dire, à mes yeux, c'est que je ne vois pas à quoi ça sert, d'où la dernière question. 7

+1

http://en.wikipedia.org/wiki/Hash_table –

+6

Vous n'avez pas besoin d'un opérateur aléatoire. Vous devez implémenter une fonction de hachage retournant une 'size' pour une instance de type keyed donnée. C'est parce que 'unordered_map' est une carte de hachage. – juanchopanza

+0

À quoi sert-elle? @juanchopanza –

Répondre

4

Un conteneur haché (table de hachage, hashmap, mappe non ordonnée) utilise une fonction de hachage pour générer une seule valeur entière représentant un index (ou une clé) pour l'entrée. Cela fait une recherche très rapide, car (en supposant que nous avons une bonne propagation des valeurs de hachage) une fois que nous avons le hachage, nous avons juste besoin de regarder cet index. La plupart des autres méthodes de stockage consiste à comparer un tas de choses jusqu'à ce que le bon élément soit trouvé.

Il n'y a vraiment que deux règles sur les clés de hachage: 1. Vous obtenez la même clé pour une entrée donnée chaque fois que la fonction de hachage est appelée. 2. La valeur est différente pour différentes entrées - elle n'a pas besoin d'être unique, mais plus vous obtenez de données similaires, mieux c'est.

Questions connexes