Uma conversa recente sobre unordered_mapC ++ me fez perceber que eu deveria usar unordered_mapna maioria dos casos em que usei mapantes, devido à eficiência da pesquisa ( amortizado O (1) vs. O (log n) ). Na maioria das vezes eu uso um mapa, eu uso intou std::stringcomo 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::mapover a std::unordered_mapno 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::mapmais std::unordered_mapno caso de tipos simples, como inte 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.

