Gegeben eine Struktur MyData
, von der viele Instanzen existieren (ich würde sagen, mehrere Millionen höchstens), für jede Instanz muss ich ein Mitglied speichern, das Werte für bis zu 8 Schlüssel enthalten kann . Der Schlüssel wird immer ein int
entfernter 0-7
sein, und die Werte werden immer ein 3D-Punkt von floats sein (nennen wir es Point3
).std :: map für kleine Sparse-Sammlungen
Bei maximaler wäre es enthalten:
Key | Value
-------------
0 | [x,y,z]
1 | [x,y,z]
2 | [x,y,z]
3 | [x,y,z]
4 | [x,y,z]
5 | [x,y,z]
6 | [x,y,z]
7 | [x,y,z]
in 99,9% der Fälle ist es jedoch 0 oder 1 Schlüssel-Wert-Paare enthalten, zB:
Key | Value
-------------
1 | [x,y,z]
Wie kann ich den Speicher-Overhead, falls vorhanden, effizient zu bestimmen, um einen leeren oder einwertigen std::map<int, Point3>
zu speichern, verglichen mit dem Speichern eines Arrays aus 8 Point3
(4 Bytes pro Float * 3 Werte * 8 Slots = 96 Bytes) und einem einzelnen BYTE
mit Bits, für die Slots sinnvolle Werte enthalten?
Im Allgemeinen ist meine Frage Was ist der Speicheraufwand von einem leeren oder fast leeren std::map
?
Verwenden Sie Vektor und nutzen Sie das Beste aus beiden Welten. auf jeden Fall ist die lineare Suche in diesem Maßstab schneller als die Suche nach bst. wie für die leere Kartengröße: Paar Zeiger, fast leer: Implementierung abhängig. – Slava
@Slava Danke. Ich verstehe, du meinst einen 'std :: vector' von' struct {int i; Punkt3 p; } ', ja? – Rotem
Sie möchten wahrscheinlich in Ihre Implementierung von STL eintauchen und sehen, wie std :: map implementiert ist. Dies wird möglicherweise von einer Implementierung zur nächsten abweichen. Sie können auch selbst experimentieren und sehen, was passiert. –