Data una struttura MyData
, di cui esistono molti esempi (direi diversi milioni al massimo), per ogni istanza devo memorizzare un membro che può contenere valori per un massimo di 8 chiavi . La chiave sarà sempre una a distanza 0-7
ei valori saranno sempre un punto 3D di float (chiamiamolo Point3
).std :: mappa per piccole raccolte sparse
Al massimo, conterrebbe:
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]
Tuttavia, nel 99,9% dei casi conterrà 0 o 1 coppie di valori-chiave, per esempio:
Key | Value
-------------
1 | [x,y,z]
Come posso determinare in modo efficiente l'overhead di memoria, se presente, di memorizzare un valore a valore singolo o vuoto std::map<int, Point3>
, rispetto alla memorizzazione di un array di 8 Point3
(4 byte per float * 3 valori * 8 slot = 96 byte) e un singolo BYTE
con bit per quali slot contengono valori significativi?
In generale, la mia domanda è qual è l'overhead di memoria di uno spazio vuoto o quasi vuoto std::map
?
utilizzare il vettore e ottenere il meglio da entrambi i mondi. in ogni caso, la ricerca lineare potrebbe essere più veloce su questa scala, quindi bst search. come per la dimensione della mappa vuota: un paio di puntatori, quasi vuoti: dipende dall'implementazione. – Slava
@Slava Grazie. Capisco che tu intenda un 'std :: vector' di' struct {int i; Punto 3 p; } ', sì? – Rotem
Probabilmente vorrete approfondire la vostra implementazione di STL e vedere come viene implementata la std :: map. Questo potrebbe differire da un'implementazione all'altra. Puoi anche sperimentare te stesso e vedere cosa succede. –