Una charla reciente sobre unordered_map
C ++ me hizo darme cuenta de que debería usarlo unordered_map
para la mayoría de los casos en los que lo usaba map
antes, debido a la eficiencia de la búsqueda ( O amortizado (1) versus O (log n) ). La mayoría de las veces utilizo un mapa, utilizo cualquiera int
o std::string
como tipo de clave; por lo tanto, no tengo problemas con la definición de la función hash. Cuanto más lo pensaba, más me daba cuenta de que no encontraba ninguna razón para usar un std::map
over a std::unordered_map
en el caso de teclas con tipos simples: eché un vistazo a las interfaces y no encontré ninguna diferencias significativas que afectarían mi código.
De ahí la pregunta: ¿hay alguna razón real para utilizar std::map
sobre std::unordered_map
en el caso de los tipos simples como int
e std::string
?
Lo pregunto desde un punto de vista estrictamente de programación: sé que no se considera completamente estándar y que puede plantear problemas con la portabilidad.
Además, espero que una de las respuestas correctas sea "es más eficiente para conjuntos de datos más pequeños" debido a una sobrecarga menor (¿es eso cierto?), Por lo tanto, me gustaría restringir la pregunta a casos donde la cantidad de las claves no son triviales (> 1 024).
Editar: duh, olvidé lo obvio (¡gracias GMan!), Sí, los mapas están ordenados, por supuesto, lo sé y estoy buscando otras razones.