Diferença entre hash_map e unordered_map?
-
22-07-2019 - |
Pergunta
Eu descobri recentemente que a implementação do mapa hash em C ++ será chamado unordered_map
.
Quando olhei para cima porque eles não estavam apenas usando hash_map
, descobri que aparentemente há problemas de compatibilidade com a implementação de hash_map
que resolve unordered_map
(mais sobre isso aqui ).
Essa página wiki não dá muito mais informações para que eu me perguntando se alguém conhecia alguns dos problemas com hash_map
que resolve unordered_map
.
Solução
Uma vez que não havia nenhuma tabela hash definido no C ++ biblioteca padrão, diferentes implementadores das bibliotecas padrão proporcionaria um não-padrão tabela hash muitas vezes chamado hash_map
. Porque estas implementações não foram escritos seguindo um padrão que todos eles tinham diferenças sutis em garantias de funcionalidade e desempenho.
C ++ 11 uma implementação de tabela de hash foi adicionado ao o C ++ padrão biblioteca padrão. Decidiu-se usar um nome alternativo para a classe para evitar colisões com essas implementações não-padrão e para evitar o uso inadvertido da nova classe por desenvolvedores que tiveram hash_table
em seu código.
O nome alternativo escolhido é unordered_map
o que realmente é mais descritivo, uma vez que sugere a interface do mapa da classe e da natureza desordenada de seus elementos.