在unordered_set中存储元素与在unordered_map中存储元素

Storing elements in an unordered_set vs storing them in an unordered_map

本文关键字:存储 元素 unordered map set      更新时间:2023-10-16

假设我有以下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;

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

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

我会选择unordered_map,因为我可以在任何时候获得一个用户,给定一个userid,而不需要任何额外的工作,而unordered_set我没有这个设施。

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

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

如果性能是一个重要的关注点,那么您可能想要分析并查看哪一个性能更好。否则,选择最合乎逻辑地描述你要做的事情的那个。[只有10万件,我认为setmap的性能可能还可以接受,如果你需要在其他地方订购的话]