将unordered_set存储为unordered_map中的键是否是个好主意

时间:2014-01-28 00:51:56

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

我希望将unordered_set存储为unordered_map中的键,这是好主意还是我应该使用std :: set存储一些数据然后使用std :: map来存储std :: set作为键。哪个更适合性能/查找?

任何建议都会有所帮助

1 个答案:

答案 0 :(得分:0)

与许多与数据结构性能相关的问题一样,具体答案取决于您的数据集 考虑到您只对查找性能感兴趣,小数据集通常倾向于使用容器的有序版本,其中“数据集”表示密钥类型(set与unordered_set)的密钥中元素的平均数量,以及外部地图类型(map与unordered_map)的(set,value_type)项数。顺便说一下,没有什么可以阻止你混合有序和无序容器,例如unordered_map,value_type>
尽管如此,唯一可以100%确定哪个容器更好的方法,就是根据您的实际数据进行分析。

考虑到这一点,这里有更多细节:

  • 对于外部容器,使用unordered_map很有可能根据哈希容器的通常特性提供更​​好的查找性能。但是,有一个更微妙的影响,这取决于密钥容器的哈希小于运算符和函数的比较性能。
  • 对于密钥容器,查找性能受容器的less-than-operator(如果外部容器是映射)或其散列函数(如果外部容器是unordered_map)的相对性能影响。

我会尝试发布一些实际的测试来测量它。