2011-10-05 62 views
6

假设我有以下的用户结构:存储元素VS它们存储在一个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 

}; 

,我需要存储的用户记录的集合(约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. 

我需要它是非常快,插入,删除的条款,并通过它的用户id访问一个特定的用户对象。

回答

7

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

至于提到的操作,速度几乎是一样的。

6

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

6

如果性能是一个重要问题,那么您可能需要进行配置并查看哪一个性能更好。否则,选择一个最符合逻辑地描述你想要做的事情。 [只有100K商品,我认为setmap可能还有可接受的性能,如果您需要在其他地方订购]