¿Diferencia entre hash_map y unordered_map?
-
22-07-2019 - |
Pregunta
Recientemente descubrí que la implementación del mapa hash en C ++ se llamará unordered_map
.
Cuando busqué por qué no solo estaban usando hash_map
, descubrí que aparentemente hay problemas de compatibilidad con la implementación de hash_map
que unordered_map
resuelve (más sobre esto aquí ).
Esa página wiki no da mucha más información, así que me pregunto si alguien conocía algunos de los problemas con hash_map
que unordered_map
resuelve.
Solución
Dado que no había una tabla hash definida en la biblioteca estándar de C ++, los diferentes implementadores de las bibliotecas estándar proporcionarían una tabla hash no estándar a menudo llamada hash_map
. Debido a que estas implementaciones no se escribieron siguiendo un estándar, todas tenían diferencias sutiles en la funcionalidad y las garantías de rendimiento.
Comenzando con C ++ 11 se ha agregado una implementación de tabla hash a El estándar de la biblioteca estándar de C ++. Se decidió utilizar un nombre alternativo para la clase para evitar colisiones con estas implementaciones no estándar y para evitar el uso involuntario de la nueva clase por parte de desarrolladores que tenían hash_table
en su código.
El nombre alternativo elegido es unordered_map
que realmente es más descriptivo ya que sugiere la interfaz de mapa de la clase y la naturaleza desordenada de sus elementos.