将元素存储在unordered_set中,并将它们存储在unordered_map中

时间:2011-10-05 13:54:32

标签: c++ data-structures unordered-map unordered-set

假设我有以下User结构:

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;

OR

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

我需要它在插入,删除和通过userId访问特定用户对象方面非常快。

3 个答案:

答案 0 :(得分:7)

我会选择unordered_map,因为我可以随时获得一个用户ID,而无需任何额外工作,而unordered_set我没有此功能。

对于上述操作,速度几乎相同。

答案 1 :(得分:6)

由于unordered_set<>无法让您通过userId轻松访问用户,因此unordered_map<>似乎是正确的选择。

答案 2 :(得分:6)

如果性能是一个重要问题,那么您可能想要分析并查看哪个性能更好。否则,请选择最符合逻辑描述您要执行的操作的那个。 [如果您需要在其他地方订购,我认为只有100K项目setmap可能具有可接受的性能“