Хранение элементов в unordered_set против сохранения их в unordered_map - PullRequest
6 голосов
/ 05 октября 2011

Предположим, у меня есть следующая структура пользователя:

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

};

, и мне нужно хранить коллекцию пользовательских записей (около 10 ^ 5 пользователей, также может масштабироваться выше).Будет ли лучше производительность, если я сохраню его как unordered_set или unordered_map?Unordered_set технически такой же, как HashSet, а unordered_map такой же, как HashMap, верно?Использование обычного набора (заказанного) не вариант, так как вставка и удаление будут очень медленными, когда количество элементов увеличивается.

unordered_set <User> userRecords;

ИЛИ

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

Мне нужно этобыть очень быстрым с точки зрения вставки, удаления и доступа к конкретному объекту пользователя по его идентификатору пользователя.

Ответы [ 3 ]

7 голосов
/ 05 октября 2011

Я бы выбрал unordered_map, потому что я могу получить пользователя с заданным идентификатором пользователя в любое время без дополнительной работы, в то время как с unordered_set у меня нет этой возможности.

Что касается упомянутых операций, скорость будет почти такой же.

6 голосов
/ 05 октября 2011

Если производительность является серьезной проблемой, то вы, вероятно, захотите профилировать и посмотреть, какая из них работает лучше. В противном случае выберите тот, который наиболее логично описывает то, что вы пытаетесь сделать. [Я думаю, что set и map могут иметь приемлемую производительность, если вы заказываете где-то еще]

6 голосов
/ 05 октября 2011

Поскольку unordered_set<> не дает вам возможности легко получить доступ к пользователю по его идентификатору пользователя, unordered_map<> кажется правильным выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...