Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Storing elements in an unordered_set vs storing them in an unordered_map

Suppose I have the following User struct:

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

};

and I need to store a collection of user records (around 10^5 users, can scale higher too ). Would it be better in performance if I store it as an unordered_set or unordered_map? Unordered_set is technically the same as HashSet, and unordered_map is the same as HashMap, right? Using a regular set (ordered) is not an option, as insertion and deletion will get very slow when the number of elements increase.

unordered_set <User> userRecords;

OR

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

I need it to be very fast in terms of insertion, deletion, and to access a particular user object by its userId.

like image 674
all_by_grace Avatar asked Oct 05 '11 13:10

all_by_grace


2 Answers

I would choose unordered_map, because I can get a user, given a userid at any time, without any extra work, while with unordered_set I don't have this facility.

As for the mentioned operations, the speed will be almost same.

like image 156
Nawaz Avatar answered Oct 21 '22 09:10

Nawaz


Since the unordered_set<> doesn't give you the possibility to easily access a user by his userId, unordered_map<> seems to be the correct choice.

like image 31
sth Avatar answered Oct 21 '22 10:10

sth