概述
- 两个函数都是作用于升序排序后的容器,查询效率为O(logN)。
- lower_bound() 用于查找某个容器中第一个大于等于值为val的下标(或迭代器)。
- lower_bound() 用于查找某个容器中第一个大于等于值为val的下标(或迭代器)。
具体使用方法:
//假定用vector<int> v; 存储数据
vector<int> v;
for (int i = 0; i < 20; i += 2) v.push_back(i);
auto it = lower_bound(v.begin(), v.end(), 10);
it就是指向第一个大于等于10的迭代器。如果我们想知道第一个大于等于10的元素的下标,我们只需要这样操作:
int idx = lower_bound(v.begin(), v.end(), 10) - v.begin();
由于vector迭代器支持减法操作,因此上述操作得到的结果就是目标值(第一个大于等于10的元素)的下标。
upper_bound的使用方法同理。如果使用数组存储数据,则lower_bound()函数的返回值是int*。
如果使用set等容器存储数据,则lower_bound()返回的迭代器不能作减法操作。