Leistung und Speicheraufwand beim Einfügen und Nachschlagen von C ++ - Karten

Ich möchte eine Zuordnung von einem speicherninteger Schlüssel zu afloat Wert im Speicher.

Ich habe ungefähr 130 Millionen Schlüssel (und dementsprechend 130 Millionen Werte).

Mein Fokus liegt auf der Suchleistung - ich muss viele, viele Millionen Suchvorgänge durchführen.

Die C ++ STL-Bibliothek hat einemap Klasse für assoziative Arrays dieser Art. Ich habe mehrere Fragen zumap.

Was ist der Speicheraufwand vonmap für einen Datensatz der oben genannten Größe? Wie skaliert der Speicheraufwand im Allgemeinen mitmap?

Es sieht aus wie die zugrunde liegende Datenstruktur fürmap ist ein rot-schwarzer, ausgeglichener Binärbaum. Es klingt wie in der realen WeltPerformance dafür istO(log n) zum Einsetzen und Abrufen.

Es erwähntO(1) für eine angedeutete Einfügung. Meine Eingabe ist vorsortiert, daher sollte ich einen Hinweis auf Einfügeereignisse geben können. Wie kann ich diesen Hinweis mithilfe der aufgeführten Methoden bereitstellen?Hier?

Gibt es einen STL-Container, der eine bessere Suchleistung bietet?

Gibt es andere öffentlich verfügbare Open-Source-Frameworks mit einer zugeordneten Array-Klasse, die eine zugrunde liegende Datenstruktur verwendet, die eine bessere Leistung als STL bietet?map?

Welche Datenstrukturen könnte ich untersuchen, wenn das Schreiben meiner eigenen Containerklasse eine bessere Suchleistung bieten würde?

Ich verwende GCC 4 für diese Aufgabe, entweder unter Linux oder Mac OS X.

Ich entschuldige mich im Voraus, wenn dies dumme Fragen sind. Danke für deinen Rat.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage