Indiquez le nombre minimum de godets lors de la construction d'un coup de pouce :: unordered_map

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

  •  22-08-2019
  •  | 
  •  

Question

Je suis en train d'utiliser boost :: unordered_map pour mettre en cache certaines valeurs. J'essaie de préciser le nombre minimum de seaux dans le constructeur:

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

Mais quand j'afficher des informations sur mon unordered_map à la fin du programme:

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

Comment puis-je spécifier le nombre minimum de seaux?

Était-ce utile?

La solution

boost::unordered_map::max_bucket_count() retourne la limite en fonction de la mise en œuvre sur le nombre de seau d'un unordered_map. Vous semblez avoir dépassé cette limite avec votre paramètre constructeur. Notez que si MSDN définit ce soit les seaux max « actuellement » autorisés (quoi que cela signifie), la spécification C ++ 0x définit comme le plus des seaux la carte peut avoir.

Je ne l'ai jamais utilisé la classe, et je ne vois rien dans le projet de C ++ 0x spec pour expliquer pourquoi le constructeur crée silencieusement un objet qui ne fait pas ce que vous avez dit à.

Je ne sais pas non ce que la motivation est peut-être derrière la 1572869 de valeur, autre que c'est un premier largeish.

Autres conseils

L'autre réponse est correcte sur la norme, mais le petit max_bucket_count est en fait un bug dans Boost 1,38, une autre version vous permettra d'utiliser plus des seaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top