lower_bound:从已排序好的序列 a 中利用二分搜索找出指向满足
a
i
≥
k
a_i \geq k
ai≥k 的
a
i
a_i
ai 的最小指针。
upper_bound:求出已排序好的序列 a 中找出指向满足
a
i
>
k
a_i>k
ai>k 的
a
i
a_i
ai的最小指针。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[5] = {2,3,4,5,6};
int b = *lower_bound(a,a+5,3); // lower_bound返回的是指针,用*取出里面的值赋值给b
int c = *upper_bound(a,a+5,3);
cout << b << ' ' << c << endl;
return 0;
}
执行结果
3 4
利用这两个函数可以求有序数组 a 中的 k 的个数:
upper_bound(a,a+n,k)-lower_bound(a,a+n,k);
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[5] = {2,3,4,5,6};
cout << upper_bound(a,a+5,3) - lower_bound(a,a+5,3) << endl;
return 0;
}
执行结果
1