1、lower_bound( )
在从小到大的排序数组中:
lower_bound( begin, end, num):从数组的begin位置到end-1位置二分查找第一个大于等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
2、upper_bound( )
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
3、具体应用
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
sort(a, a + 10);
int pos1 = lower_bound(a, a + 10, 7) - a; // 返回数组中第一个大于或等于被查数的值
int pos2 = upper_bound(a, a + 10, 7) - a; // 返回数组中第一个大于被查数的值
cout << pos1 << " " << a[pos1] << endl; // 输出 6 7
cout << pos2 << " " << a[pos2] << endl; // 输出 7 8
return 0;
}