Réponses:
Hash
est une structure de données extrêmement mal nommée dans laquelle le programmeur a confondu l’interface avec l’implémentation ( et était trop paresseuse pour écrire le nom complet, c’est-à-dire qu’elle a HashTable
plutôt recours à une abréviation Hash
).
Dictionary
est le nom “correct” de l'interface (= the ADT ), c'est-à-dire un conteneur associatif qui associe des clés (généralement uniques) à des valeurs (pas nécessairement uniques).
Une table de hachage est une implémentation possible d'un tel dictionnaire qui fournit d'assez bonnes caractéristiques d'accès (en termes d'exécution) et est donc souvent l'implémentation par défaut.
Une telle implémentation a deux propriétés importantes:
(Pour qu'une clé soit hashable, cela signifie que nous pouvons calculer une valeur numérique à partir d'une clé qui est ensuite utilisée comme index dans un tableau.)
Il existe d'autres implémentations de la structure de données du dictionnaire qui imposent un ordre aux clés - on parle souvent de dictionnaire trié (et généralement implémenté sous la forme d'un arbre de recherche, bien qu'il existe d'autres implémentations efficaces).
Pour résumer: un dictionnaire est un ADT qui mappe les clés aux valeurs. Il existe plusieurs implémentations possibles de cet ADT, dont la table de hachage . Hash
est un abus de langage, mais dans le contexte, il est équivalent à un dictionnaire implémenté en termes de table de hachage.
Hash
classe avec une table de hachage, puisque Ruby 1.9 Hash
préserve l'ordre d'insertion, contrairement à la table de hachage. Ainsi, dans Ruby 1.9, le nom Hash
ne reflète même plus l'implémentation.
"Dictionnaire" est le nom du concept. Une table de hachage est une implémentation possible.
Un dictionnaire est le terme collectif donné pour toute implémentation de structure de données utilisée pour les recherches / insertions rapides. Ceci peut être réalisé / mis en œuvre en utilisant diverses structures de données telles qu'une table de hachage, des listes de sauts, une arborescence de bases de données, etc. Une table de hachage est une structure de données spécifique utile à de nombreuses fins, notamment la mise en œuvre d'un dictionnaire.
Un dictionnaire utilise une clé pour référencer la valeur directement à l'intérieur d'un tableau associatif .
c'est à dire (KEY => VALUE)
Un hachage est plus souvent décrit comme une table de hachage qui utilise une fonction de hachage pour calculer la position en mémoire (ou plus facilement un tableau) où la valeur sera. Le hachage prendra la clé en entrée et donnera une valeur en sortie. Puis connectez cette valeur à la mémoire ou à l’index du tableau.
c'est à dire KEY => HASH FUNCTION => VALUE
Je suppose que l'un est direct tandis que l'autre ne l'est pas. Les fonctions de hachage peuvent ne pas être parfait non plus et peuvent parfois fournir un index référençant la valeur fausse. Mais cela peut être corrigé.
Meilleur endroit à regarder: Wikipedia ( tableau associatif et table de hachage )
unordered_map
à montrer ce qu'ils font plutôt que ce qu'ils sont.