C ++ algumas perguntas sobre boost :: unordered_map & boost :: hash

Recentemente, comecei a me concentrar no boost e nos contêineres, e li alguns artigos na Web e no stackoverflow que um boost :: unordered_map é o contêiner de melhor desempenho para grandes coleções. Portanto, eu tenho essa classe State, que deve ser exclusiva no contêiner (sem duplicatas) e haverá milhões, senão bilhões de estados no contêiner. Portanto, tenho tentado otimizá-lo para tamanho pequeno e o menor número possível de cálculos. Eu estava usando um boost :: ptr_vector antes, mas enquanto eu lia no stackoverflow, um vetor é bom apenas desde que não haja muitos objetos nele. No meu caso, o Estado descreve as informações sensório-motoras de um robô, de modo que pode haver uma enorme quantidade de estados e, portanto, a pesquisa rápida é a principal prioridade. Seguindo oocumentação @boost for unordered_map Eu percebo que há duas coisas que eu poderia fazer para acelerar as coisas: use uma função hash e use um operador de igualdade para comparar Estados com base em sua função hash. Portanto, implementei uma função privada hash () que recebe informações de estado e, usando boost :: hash_combine, cria um valor de hash std :: size_t. O operador == compara basicamente os valores de hash do estado. Tão

std :: size_t é suficiente para cobrir bilhões de combinações possíveis de função hash? Para evitar estados duplicados, pretendo usar seus hash_values.

Ao criar um mapa_estado, devo usar como chave o estado * ou o valor do hash? ou seja:boost::unordered_map<State*,std::size_t> state_map; Orboost::unordered_map<std::size_t,State*> state_map;

Os tempos de pesquisa com um boost :: unordered_map :: iterator = state_map.find () são mais rápidos do que passando por um boost :: ptr_vector e comparando o valor da chave de cada iterador?

or fim, todas as dicas ou truques sobre como otimizar um mapa não-ordenado para velocidade e pesquisas rápidas serão muito apreciada

EDIT: Eu já vi algumas respostas, uma delas para não usar boost, mas C ++ 0X, outra para não usar um unordered_set, mas para ser sincero, ainda quero ver como o boost :: unordered_set é usado com hash função. Eu segui a documentação do boost e implementei, mas ainda não consigo descobrir como usar a função hash do boost com o conjunto ordenad

questionAnswers(3)

yourAnswerToTheQuestion