c++ - std::lower_bound 与 std::set 的时间复杂度是多少?

标签 c++ algorithm stl set complexity-theory

我知道有 std::set::lower_bound 并且时间复杂度是 O(log),我看到 std::lower_bound std::set 上运行时比 std::set::lower_bound 慢得多。

我用谷歌搜索并找到了这个:

http://en.cppreference.com/w/cpp/algorithm/lower_bound http://en.cppreference.com/w/cpp/iterator/advance

所以很明显,因为 std::advance 对于 set::iterator 是线性的,所以整个 std::lower_bound 需要直到 O(n)

但是,当我使用它时,它的运行速度比 O(n) 快得多(一些 friend 也这么说),谁能解释为什么或告诉我它不是那样的。

最佳答案

std::lower_bound() 的保证复杂度在非随机访问迭代器上为 O(n)。如果该算法检测到搜索是在一个有序的关联容器上进行的,它可能会利用树结构可能实现更好的复杂性。我不知道是否有任何实现这样做。

关于c++ - std::lower_bound 与 std::set 的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18170527/

相关文章:

c++ - OpenCV - 关闭图像显示窗口

c++ - 删除被多个变量使用的指针

c++ - 在 C++ 中使用动态加载重新加载库

algorithm - 我寻找圆线碰撞解决方案的功能可能有什么问题?

c++ - 自定义分配器无法重新绑定(bind)到其他类型

javascript - 添加 Loader 直到 STL 图像加载 PHP

c++ - 我正在尝试在不同线程上的Windows API中使用OpenGL

c++ - 将n组文件组合在一起(随机且不重复)

c++ - DFID(深度优先迭代深化)与 IDA*(迭代深化 A*)

c++ - vector 问题的 vector