Uma conversa recente sobre unordered_map
C ++ me fez perceber que eu deveria usar unordered_map
na maioria dos casos em que usei map
antes, devido à eficiência da pesquisa ( amortizado O (1) vs. O (log n) ). Na maioria das vezes eu uso um mapa, eu uso int
ou std::string
como o tipo de chave; portanto, não tenho problemas com a definição da função hash. Quanto mais eu pensava sobre isso, mais percebia que não encontrava nenhuma razão para usar um std::map
over a std::unordered_map
no caso de chaves com tipos simples - observei as interfaces e não encontrei nenhuma diferenças significativas que impactariam meu código.
Daí a pergunta: existe alguma razão real para usar std::map
mais std::unordered_map
no caso de tipos simples, como int
e std::string
?
Estou perguntando do ponto de vista estritamente de programação - sei que não é totalmente considerado padrão e que pode causar problemas com a portabilidade.
Além disso, espero que uma das respostas corretas possa ser "é mais eficiente para conjuntos menores de dados" devido a uma sobrecarga menor (isso é verdade?) - portanto, gostaria de restringir a pergunta a casos em que a quantidade de chaves não é trivial (> 1 024).
Edit: duh, esqueci o óbvio (obrigado GMan!) - sim, os mapas estão ordenados, é claro - eu sei disso e estou procurando por outros motivos.