Melhor maneira de criar grande hashmap em tempo de compilação (C ++)?
-
05-07-2019 - |
Pergunta
Na minha aplicação, eu preciso de um mapeamento mapa de hash cordas para um grande número de objetos estáticos. Os mapeamentos permanecem fixos durante a duração da aplicação. Existe uma maneira fácil de pré-gerar os mapeamentos em tempo de compilação em vez de construí-la elemento por elemento quando o aplicativo é iniciado?
Solução
Olhe para cima gperf código , ele gera para você que vai perfeitamente hash.
Outras dicas
Confira função hash perfeita de Burtlebob. Na minha experiência, é mais flexível do que gperf. http://burtleburtle.net/bob/hash/perfect.html
Você poderia escrever um gerador de código simples que emite um arquivo de cabeçalho com os mapeamentos, e executar esse como uma etapa de pré-build em seu processo de criação.
Você está procurando Boost. map_list_of
de Atribuir. Ele trabalha para HashMaps também.
#include <boost/assign/list_of.hpp> // for 'map_list_of()'
#include <boost/assert.hpp>
#include <map>
using namespace std;
using namespace boost::assign; // bring 'map_list_of()' into scope
{
map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);
BOOST_ASSERT( next.size() == 5 );
BOOST_ASSERT( next[ 1 ] == 2 );
BOOST_ASSERT( next[ 5 ] == 6 );
// or we can use 'list_of()' by specifying what type
// the list consists of
next = list_of< pair<int,int> >(6,7)(7,8)(8,9);
BOOST_ASSERT( next.size() == 3 );
BOOST_ASSERT( next[ 6 ] == 7 );
BOOST_ASSERT( next[ 8 ] == 9 );
}