Especificar el número mínimo de cubos cuando se construye un impulso :: unordered_map

StackOverflow https://stackoverflow.com/questions/694572

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de impulsar el uso :: unordered_map para almacenar en caché algunos valores. Trato de especificar el número mínimo de cubos en el constructor:

#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> >());

Pero cuando puedo mostrar información acerca de mi unordered_map al final del 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

¿Cómo se especifica el número mínimo de cubos?

¿Fue útil?

Solución

boost::unordered_map::max_bucket_count() devuelve el límite dependiente de la implementación en el recuento cuchara de una unordered_map. Parecen haber superado este límite con el parámetro de constructor. Tenga en cuenta que, si bien MSDN define que se trata de los cubos max "actualmente" permitidas (lo que significa), la especificación C ++ 0x define que sea la mayoría de los cubos del mapa puede tener.

Nunca he usado la clase, y no puedo ver nada en el proyecto de C ++ 0x especificaciones para explicar por qué el constructor es la creación de un objeto en silencio que no hace lo que le dijo a.

Asimismo, no sé cuál es la motivación podría estar detrás del valor 1572869, aparte de que es un número primo más bien tirando.

Otros consejos

La otra respuesta es correcta acerca de la norma, pero el pequeño max_bucket_count es en realidad un error en Boost 1.38, cualquier otra versión le permitirá utilizar más cubos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top