die minimale Anzahl von Eimern angeben, wenn eine boost :: unordered_map Konstruktion
-
22-08-2019 - |
Frage
Ich versuche Schub zu verwenden :: unordered_map einige Werte zwischenzuspeichern. Ich versuche, minimale Anzahl von Eimern in dem Konstruktor zu spezifizieren:
#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> >());
Aber wenn ich Anzeige von Informationen über meine unordered_map am Ende des Programms:
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
Wie gebe ich die Mindestanzahl der Eimer?
Lösung
boost::unordered_map::max_bucket_count()
gibt die Implementierung abhängige Begrenzung der Schaufelzahl eines unordered_map
. Sie scheinen diese Grenze mit dem Konstruktor Parameter überschritten zu haben. Beachten Sie, dass während MSDN definiert dies die max Eimer „zur Zeit“ erlaubt (was immer das bedeutet), die C ++ 0x spec es die meisten Eimer die Karte haben kann jemals sein definiert sein.
Ich habe noch nie verwendet die Klasse, und ich kann nichts im Entwurf C ++ 0x spec der Konstruktor zu erklären, warum lautlos ein Objekt schafft, das nicht das, was Sie gesagt, es tut.
Ich weiß auch nicht, was die Motivation hinter dem Wert 1572869
sein könnte, außer, dass es ein largeish Primzahl.
Andere Tipps
Die andere Antwort über den Standard richtig ist, aber die kleine max_bucket_count
ist eigentlich ein Fehler in Boost-1,38, eine andere Version lässt Sie mehr Eimer verwenden.