Pergunta

Eu estou tentando usar boost :: unordered_map para armazenar em cache alguns valores. Tento especificar o número mínimo de baldes no construtor:

#include <boost/unordered_map.hpp>
typedef boost::unordered_map<float, float> Mycache;
Mycache cache((std::size_t)25165843,
              boost::hash<float>(),
              std::equal_to<float>(),
              std::allocator<std::pair<float const, float> >());

Mas quando eu exibir informações sobre o meu unordered_map no final do programa:

g ++:

unordered_map.size(): 15861612
unordered_map.load_factor: 10.0845
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

vc ++:

unordered_map.size(): 13916119
unordered_map.load_factor: 8.8476
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

Como faço para especificar o número mínimo de baldes?

Foi útil?

Solução

boost::unordered_map::max_bucket_count() retorna o limite dependente de implementação na contagem balde de uma unordered_map. Você parece ter ultrapassado este limite com o seu parâmetro de construtor. Note-se que enquanto MSDN define este seja os baldes max "atualmente" permitidas (o que isso significa), o C ++ 0x especificação define ser o mais baldes o mapa pode ter.

Eu nunca usei a classe, e eu não consigo ver nada no projecto C ++ 0x especificação para explicar por que o construtor é silenciosamente a criação de um objeto que não faz o que você disse a ele.

Eu também não sei o que a motivação pode estar por trás do valor 1572869, além de que é um primo largeish.

Outras dicas

A outra resposta está correta sobre o padrão, mas o pequeno max_bucket_count é realmente um bug no impulso 1.38, qualquer outra versão permitirá que você use mais baldes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top