std::lower_bound找≥目标值的第一个位置,std::upper_bound找>目标值的第一个位置,二者结合可计算有序序列中元素出现次数,均需有序区间并支持自定义比较函数。

在C++中,std::lower_bound 和 std::upper_bound 是两个非常实用的二分查找算法,定义在 algorithm 头文件中。它们用于在已排序的区间中快速定位元素的位置,常用于优化查找性能,尤其是在处理大量有序数据时。
std::lower_bound(first, last, value) 返回一个迭代器,指向区间 [first, last) 中第一个不小于 value 的元素位置。换句话说,它找到的是第一个满足 ≥ value 的元素。
常见用途:
示例:
立即学习“C++免费学习笔记(深入)”;
vector<int> nums = {1, 2, 4, 4, 5, 7, 9};std::upper_bound(first, last, value) 返回指向区间中第一个大于 value 的元素的迭代器。即找到第一个满足 > value 的位置。
典型场景:
示例:
立即学习“C++免费学习笔记(深入)”;
vector<int> nums = {1, 2, 4, 4, 5, 7, 9};对于有序数组中重复元素的计数,可以利用这两个函数:
int count = std::upper_bound(nums.begin(), nums.end(), x)这段代码计算了值 x 在数组中出现的次数。因为:
默认情况下,这两个函数使用 < 比较,适用于升序排列。如果容器是降序,或者你想用自定义规则,可以传入比较函数或 lambda。
例如,对降序数组使用:
vector<int> nums = {9, 7, 5, 4, 4, 2, 1}; // 降序也可以用 lambda 实现更复杂的逻辑。
基本上就这些。只要记住:lower_bound 找 ≥,upper_bound 找 >,且都要求数据有序。合理使用能大幅提高查找效率,避免手写二分出错。不复杂但容易忽略细节。
以上就是c++++中std::lower_bound和std::upper_bound的用法 _c++二分查找算法使用技巧的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号