Como onipresente é hash_map?
-
03-07-2019 - |
Pergunta
Os cabeçalhos hash_map
e hash_set
não estão incluídos no C ++ padrão ainda, mas eles estão disponíveis como extensões com todos os compiladores que eu usei recentemente.
Eu estou querendo saber o quanto eu posso contar com isso em código real, sem sacrificar a portabilidade. Eu estou trabalhando em projetos de ferramentas que precisam ser executados em um host de arquiteturas e compiladores, incluindo:
- Linux (x86_64, AMD / Intel): GCC, Intel, Portland Compiladores
- AIX (Power): GCC, xlC
- Cray XT Series (AMD): GCC, Portland, PathScale Compiladores
- IBM Blue Gene Series (Power): xlC, GCC
- SGI Altix (Itanium): compiladores da Intel
- Windows:. Não é realmente uma prioridade, mas fique à vontade para dar respostas úteis
Eu percebo algumas delas são bastante exótico, mas isso não é o ponto. Quais são suas experiências com extensões STL através de múltiplas plataformas e compiladores? eles são onipresentes ainda? Será que você usá-los em seu projeto?
Solução
I provavelmente procurar o impulso equivelant e uso isso. Pelo menos eles têm alguma pressão de seus usuários para ser independente de plataforma. Eu não posso imaginar o que aconteceria se você entrou com um bug contra compiladores GCC e Intel e disse-lhes para reconciliar suas diferenças sobre como hash_map foi implementado. Na melhor das hipóteses você seria capaz de levá-los a falar uns com os outros. Suponha que você conseguido ainda que, em seguida, você fixa só como compiladores da Intel e do CCG são diferentes. Boa sorte para conseguir todos os outros juntos e resolver o problema dentro de poucos anos.
Pelo menos com impulso você sabe as diferenças entre plataformas estão sendo trabalhados por uma organização ..
Editar O impulso equivalente é, aparentemente, conjunto não ordenada ou < a href = "http://www.boost.org/doc/libs/1_37_0/doc/html/boost/unordered_map.html" rel = "noreferrer"> mapa não ordenada . (Graças Chefe Geek)
Outras dicas
Não, você iria escrever seu próprio, se você é um grande o suficiente organização / projeto. Dessa forma, você pode adaptá-los para melhor atender às suas necessidades e problemas de portabilidade de endereço. EA fez isso, com o seu "eastl" pretende atingir todas as plataformas de jogos, PC, Mac, Xbox 360, Wii, PS2, PS3 etc ...