最近,在处理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))的二进制搜索函数?在我的代码中,它最终比这要慢。