48 votes

Différence entre hash_map et unordered_map ?

J'ai récemment découvert que l'implémentation de la carte de hachage en C++ sera appelée unordered_map .

Quand j'ai cherché à savoir pourquoi ils n'utilisaient pas simplement hash_map j'ai découvert qu'il y a apparemment des problèmes de compatibilité avec l'implémentation de l'outil de gestion de l'information. hash_map que unordered_map résout (plus d'informations à ce sujet aquí ).

Cette page wiki ne donne pas beaucoup plus d'informations. Je me demandais donc si quelqu'un connaissait certains des problèmes liés au hash_map que unordered_map se résout.

77voto

Stef Points 2532

Étant donné qu'aucune table de hachage n'était définie dans la bibliothèque standard C++, différents implémenteurs des bibliothèques standard fournissaient une table de hachage non standard souvent appelée hash_map . Comme ces implémentations n'étaient pas écrites selon une norme, elles présentaient toutes des différences subtiles en termes de fonctionnalité et de garanties de performance.

En commençant par C++11 une implémentation de table de hachage a été ajoutée à la bibliothèque standard C++. Il a été décidé d'utiliser un nom alternatif pour la classe afin d'éviter les collisions avec ces implémentations non standard et d'empêcher l'utilisation par inadvertance de la nouvelle classe par les développeurs qui avaient hash_table dans leur code.

Le nom alternatif choisi est unordered_map qui est vraiment plus descriptif, car il fait allusion à l'interface de la carte de la classe et à la nature non ordonnée de ses éléments.

5 votes

Et c'est l'une des choses qui montre que la std n'a pas donné les résultats escomptés. Non pas que je sache ce qui aurait pu raisonnablement éviter le problème.

0 votes

MSVC avait stdext pour ses bibliothèques d'extension standard.

9 votes

@MichaelBurr Comment a namespace std a échoué ici ? Aucun des éléments non standard hash_map sont dans cet espace de nom (légalement, du moins), donc je ne comprends pas bien la déclaration de @Stef... Y a-t-il une source pour cela ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X