结论

lower_bound() 是第一个大于等于 value 的数
upper_bound() 是第一个大于 value 的数

如果需要小于(小于等于),可以使用:

lower_bound() - 1 是最后一个小于 value 的数
upper_bound() - 1 是最后一个小于等于 value 的数

lower_bound() 和 upper_bound() 在 set/multiset/map/multimap 中仍可用(作为成员函数使用),其中 map 只能搜索第一个元素(毕竟是以第一个元素排序的)。

测试数据

1 2 2 2 3 3 4 5

lower_bound(2) = 1:
a[1-1] = 1
a[1] = 2
a[1+1] = 2

upper_bound(2) = 4:
a[4-1] = 2
a[4] = 3
a[4+1] = 3

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<bits/stdc++.h>

using namespace std;

int main()
{
const int n = 8;
int a[n] = { 1,2,2,2,3,3,4,5 };
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;

cout << endl;
cout << "lower_bound: " <<endl;
int l = lower_bound(a, a + n, 2) - a;
cout << "a[" << l << "-1] = " << a[l - 1] << endl;
cout << "a[" << l << "] = " << a[l] << endl;
cout << "a[" << l << "+1] = " << a[l + 1] << endl;

cout << endl << endl;
cout << "upper_bound: " << endl;
l = upper_bound(a, a + n, 2) - a;
cout << "a[" << l << "-1] = " << a[l - 1] << endl;
cout << "a[" << l << "] = " << a[l] << endl;
cout << "a[" << l << "+1] = " << a[l + 1] << endl;
}