C++ lower_bound 与 upper_bound 核心用法解析
lower_bound 和 upper_bound 是 C++ 标准库 <algorithm> 头文件中的二分查找利器,专门用于在有序区间内高效定位元素。理解它们的区别和适用场景,能帮你写出更高效的容器操作代码。
核心定义与区别
这两个函数都返回迭代器,但判断逻辑不同:
- lower_bound(下界):在
[first, last)区间内,找到第一个大于或等于 (>=) 目标值target的元素。 - upper_bound(上界):在
[first, last)区间内,找到第一个大于 (>) 目标值target的元素。
简单来说,lower_bound 指向的是目标值的'左边界'(包含自身),而 upper_bound 指向的是'右边界'(不包含自身)。
| 函数 | 判断条件 | 定位结果 |
|---|---|---|
| lower_bound | >= target | 目标值的左边界(包含自身) |
| upper_bound | > target | 目标值的右边界(不包含自身) |
使用前提与参数说明
必须满足的前提
查找区间 [first, last) 必须是升序排列的(默认使用 < 运算符比较)。如果区间无序,函数的行为是未定义的,结果完全不可预测。这是新手最容易踩的坑,使用前务必确认数据已排序。
函数参数
以 lower_bound 为例,有两个重载版本:
- 默认比较(升序)
template <class ForwardIterator, class T> ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const T& val); - 自定义比较(支持降序等)
template <class ForwardIterator, class T, class > ;

