Pré-alocando buckets em um C ++ std :: unordered_map
Estou usando ostd::unordered_map
do gnu ++ 0x para armazenar uma enorme quantidade de dados. Quero pré-alocar espaço para o grande número de elementos, pois posso vincular o espaço total usad
O que eu gostaria de poder fazer é ligar para:
std::unordered_map m;
m.resize(pow(2,x));
onde x é conhecido.
std::unordered_map
não suporta isso. Eu prefiro usarstd::unordered_map
se possível, uma vez que fará parte do padrã
Algumas outras restrições:
Precisa de acesso O (1) confiável e mutação do mapa. As funções de hash e comparação desejadas já não são padrão e são caras. Mutação O (log n) (como emstd::map
) está muito caro
-> O hash caro e a comparação também tornam o crescimento baseado em amortização muito caro. Cada inserção extra requer operações O (n) dessas funções, o que resulta em um termo quadrático extra no tempo de execução do algoritmo, pois os requisitos de armazenamento exponencial precisam de crescimentos O (n).