我应该使用std :: set或std :: unordered_set作为一组指针吗?

时间:2016-02-19 12:09:07

标签: c++ performance set

我有一组指针。在第一步中,我插入数据指针,在第二步中,我迭代整个集合并对元素执行某些操作。顺序并不重要,我只需要避免重复,这与指针比较工作正常。

我的问题是,为同一目的使用无序集是否有利。对于无序集合,插入速度更快吗?

1 个答案:

答案 0 :(得分:7)

正如Ami Tavory评论的那样,如果你不需要订购,那么通常最好选择无序容器。原因是如果订单以某种方式提高了性能,无序容器仍然可以自由使用它,因此无论如何都会获得相同或更好的复杂性。

无序集合的缺点是它们通常需要密钥类型的哈希函数。如果制作一个太硬或太贵,那么不使用哈希的容器可能会更好。

在C ++的标准库中,std::set的平均插入复杂度为 O(log(N)),而对于std::unordered_set,它的 O(1)< / em>的。除此之外,使用std::unordered_set时,平均缓存未命中次数可能较少。

但在一天结束时,这只是理论。你应该尝试一些听起来不错的东西并对其进行分析以确定它是否真的存在。