web-dev-qa-db-fra.com

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++ s'appellera unordered_map.

Quand j'ai recherché pourquoi ils n'utilisaient pas seulement hash_map, J'ai découvert qu'il y avait apparemment des problèmes de compatibilité avec l'implémentation de hash_map cette unordered_map résout (en savoir plus ici ).

Cette page wiki ne donne pas beaucoup plus d'informations, donc je me demande si quelqu'un connaissait certains des problèmes avec hash_map cette unordered_map résout.

45
kidnamedlox

Puisqu'aucune table de hachage n'était définie dans la bibliothèque standard C++, différents implémenteurs des bibliothèques standard fourniraient une table de hachage non standard souvent nommée hash_map. Parce que ces implémentations n'ont pas été écrites selon une norme, elles présentaient toutes de subtiles différences de fonctionnalités et de garanties de performances.

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

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

70
Stef