die minimale Anzahl von Eimern angeben, wenn eine boost :: unordered_map Konstruktion

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

  •  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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top