小编Leo*_*ret的帖子

C ++ std :: lower_bound和std :: set :: lower_bound之间的区别?

最近,在处理C ++编程问题时,我遇到了一些有趣的事情。我的算法使用了非常大的集合,并且会在其上多次使用std :: lower_bound。但是,提交解决方案后,与我在纸上所做的数学运算相反,即证明我的代码足够快,但结果却太慢了。代码看起来像这样:

using namespace std;

set<int> s;
int x;

//code code code

set<int>::iterator it = lower_bound(s.begin(),s.end(),x);
Run Code Online (Sandbox Code Playgroud)

但是,在从好友那里得到使用set :: lower_bound的提示之后,所讨论的算法比以前更快地工作了waaaaaaaay,它遵循了我的数学思想。更改后的二进制搜索:

set<int>::iterator it = s.lower_bound(x);
Run Code Online (Sandbox Code Playgroud)

我的问题是两者之间有什么区别?为什么一个工作比另一个工作快得多?Lower_bound是否应该是具有复杂度O(log2(n))的二进制搜索函数?在我的代码中,它最终比这要慢。

c++ algorithm std binary-search c++11

10
推荐指数
1
解决办法
802
查看次数

标签 统计

algorithm ×1

binary-search ×1

c++ ×1

c++11 ×1

std ×1