我了解可以使用find_if() STL算法函数来完成此任务,如下所示:
long long int k; //k = key
scanf("%lld",&k);
auto it = find_if(begin(v),end(v),[k](auto e){return e<k;});
然而我需要在对数时间内获得结果。由于向量已经按降序排序,我想使用二进制搜索方法。
我了解STL算法函数lower_bound
和upper_bound
保证具有对数复杂度。但是,我无法想出如何使用这些函数来获得小于关键字的第一个元素,而不是大于或等于关键字的第一个元素。
例如:
假设我的向量内容为:21 9 8 7 6 4
我的关键字是:10
我希望输出结果为9
,因为它是从向量左到右扫描时第一个小于10
的元素。
在这方面提供任何帮助将非常有用!
谢谢