2011-10-05 7 views
6

Supponiamo che io ho il seguente struct User:elementi Memorizzazione in un unordered_set vs memorizzandoli in un unordered_map

struct User { 
    string userId; 
    UserType userType; // UserType is just an enumeration 
    string hostName; 
    string ipAddress; 
    //and more other attributes will be added here 

}; 

e ho bisogno di memorizzare una collezione di record utente (circa 10^5 utenti, in grado di scalare troppo alto). Sarebbe meglio nelle prestazioni se lo memorizzo come unordered_set o unordered_map? Unordered_set è tecnicamente lo stesso di HashSet e unordered_map è lo stesso di HashMap, giusto? L'uso di un set regolare (ordinato) non è un'opzione, poiché l'inserimento e la cancellazione diventeranno molto lenti quando il numero di elementi aumenterà.

unordered_set <User> userRecords; 

O

unordered_map <string, User> userRecords; // string is the user ID. 

ho bisogno di essere molto veloce in termini di inserimento, cancellazione, e per accedere ad un oggetto utente particolare dal suo ID utente.

risposta

7

Vorrei scegliere unordered_map, perché posso ottenere un utente, dato un ID utente in qualsiasi momento, senza alcun lavoro aggiuntivo, mentre con unordered_set non ho questa funzione.

Per quanto riguarda le operazioni menzionate, la velocità sarà quasi la stessa.

6

Poiché lo unordered_set<> non ti dà la possibilità di accedere facilmente a un utente tramite il suo ID utente, unordered_map<> sembra essere la scelta corretta.

6

Se le prestazioni rappresentano un problema significativo, è probabile che si desideri definire il profilo e vedere quale si comporta meglio. Altrimenti, scegli quello che descrive più logicamente quello che stai cercando di fare. [Con solo 100.000 elementi, penso che set e map possano avere prestazioni accettabili se è necessario ordinare altrove]

Problemi correlati