【发布时间】:2020-11-11 21:28:44
【问题描述】:
我正在尝试使用 log(n) 方法找出满足特定条件的最后一个变量。我查看了文档,发现 这些在算法部分(http://www.cplusplus.com/reference/algorithm/)
二分查找(在分区/排序范围内操作):
lower_bound:将迭代器返回到下界(函数模板)
upper_bound:将迭代器返回到上界(函数模板)
equal_range:获取相等元素的子范围(函数模板)
binary_search:测试值是否存在于排序序列中(函数模板)
我认为要做我想做的事,我应该使用upper_bound/lower_bound。
在这种情况下,我试图找出小于或等于 3 的数字的最后一个索引。(3)。我知道有更简单的方法,例如遍历整个数组,但我想学习如何使用 upper_bound。我知道比较器需要 2 个数字,但我不需要 2 个数字,所以我不知道该怎么做。
#include <bits/stdc++.h>
using namespace std;
vector<int> a = {0,1,2,3,4,5};
bool check(int base) {
if (a.at(base) <= 3) {
return true;
}
return false;
}
int main() {
int c;
sort(a.begin(), a.end());
c = distance(a.begin(), upper_bound(a.begin(), a.end(), check));
cout<<c;
return 0;
}
我该如何正确地做到这一点?
【问题讨论】: