lower_bound是利用二分查找的方法在一个排好序的数组中进行查找的。
在从小到大的排序数组中,
lower_bound(nums.begin(), nums.end());
从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
在从大到小的排序数组中,重载lower_bound()
lower_bound(nums.begin(), nums.end(), num, greater<int>);
从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> nums = {1, 3, 4,5};
sort(nums.begin(), nums.end(), greater<int>());
for(int i = 0; i < nums.size(); i++)
{
cout<<nums[i]<<" ";
}
cout<<endl;
// 二分查找
int idx = lower_bound(nums.begin(), nums.end(), 2, greater<int>()) - nums.begin();
cout<<"idx: "<<idx<<endl;
system("pause");
return 0;
}
结果如下: