Pre-allocating Eimer in einer C++ - std::unordered_map

Ich bin mit der std::unordered_map von gnu++0x speichern einer großen Menge von Daten. Ich will pre-Zuordnung von Speicherplatz für die große Anzahl von Elementen, da ich gebunden der gesamte Speicherplatz verwendet.

Was ich möchte in der Lage sein zu tun ist, rufen Sie:

std::unordered_map m;
m.resize(pow(2,x));

wo x bekannt ist.

std::unordered_map dies nicht unterstützt. Ich würde eher std::unordered_map wenn möglich, da er schließlich Teil des Standards.

Einige andere Einschränkungen:

Müssen zuverlässig O(1) der Zugriff und die mutation von der Karte. Die gewünschte hash und Vergleich der Funktionen sind bereits nicht-standard-und etwas teuer. O(log n) mutation (wie bei std::map) ist zu teuer.

-> Die teuren hash und Vergleich auch Abschreibungen-basiert Wachstum viel zu teuer. Jedes extra einfügen erfordert O(n) Operationen von Funktionen, die Ergebnisse in einem zusätzlichen quadratischen term in der der Algorithmus die Laufzeit, da der exponentielle Speicherbedarf benötigen O(n) Wucherungen.

InformationsquelleAutor JAD | 2011-05-05
Schreibe einen Kommentar