向量与集合的搜索性能

Uts*_*v T 3 c++ vector set

阅读了一些问题和答案后,内容如下:

在集合中查找比在向量中查找渐近更快。(因为集合基本上是二叉搜索树)。对于手头的任务,集合比向量更快,因为它保持其内容排序并进行二分搜索来查找指定的项目,给出对数复杂度而不是线性复杂度。

我的问题是 - 使用二分搜索在排序向量中搜索元素是否与在集合中搜索元素花费相同的时间?如果不是,那么性能差异背后的原因是什么?

Jam*_*nze 6

如果您可以保持向量排序,并使用std::lower_bound,则搜索适用O(lg(n))于两者。需要注意的是, std::vector大多数机器享有更好的局部性,因此常数因子将显着降低。由于碎片较少,它还可能导致更有效的内存使用 - 如果您预先知道最大大小并且可以使用std::vector<>::reserve.