新闻中心

C++ lower_bound与upper_bound用法_C++有序序列的二分查找利器

2025-11-28
浏览次数:
返回列表
lower_bound返回首个不小于目标值的迭代器,upper_bound返回首个大于目标值的迭代器,二者结合可确定元素出现区间。例如在升序数组{1,2,4,4,5,7}中查找4,lower_bound指向索引2,upper_bound指向索引4,差值为出现次数2。降序排列时需传入greater()等自定义比较函数,确保与排序规则一致。使用前必须保证序列有序,可高效实现查找、去重、插入等操作。

c++ lower_bound与upper_bound用法_c++有序序列的二分查找利器

在C++中,lower_boundupper_bound 是处理有序序列时非常高效的二分查找工具,定义于 gorithm> 头文件中。它们能快速定位目标值的位置,常用于去重、插入排序、区间统计等场景。

lower_bound:查找第一个不小于目标值的位置

函数作用:在有序区间 [first, last) 中,返回指向第一个元素位置,其值大于等于给定值 val 的迭代器。

使用前提:序列必须按升序排列(或按自定义比较规则有序)。

示例代码:

vector nums = {1, 2, 4, 4, 5, 7};
auto it = lower_bound(nums.begin(), nums.end(), 4);
cout

若查找值为 3,则返回指向 4(索引2)的迭代器,因为它是第一个 ≥3 的元素。

upper_bound:查找第一个大于目标值的位置

函数作用:返回指向第一个元素位置,其值严格大于给定值 val 的迭代器。

示例代码:

vector nums = {1, 2, 4, 4, 5, 7};
auto it = upper_bound(nums.begin(), nums.end(), 4);
cout

结果指向值为5的元素,即第一个 >4 的位置。

配合使用:确定值的完整出现区间

当需要找出某个值在有序序列中的所有出现范围时,可结合两者:

int val = 4;
auto left = lower_bound(nums.begin(), nums.end(), val);
auto right = upper_bound(nums.begin(), nums.end(), val);
cout

这段代码输出 2,表示4出现了两次。

支持自定义比较函数

如果容器按降序排列,需传入比较函数,例如 greater<int>()</int>

vector desc = {7, 5, 4, 4, 2, 1};
auto it = lower_bound(desc.begin(), desc.end(), 4, greater());
// 找到第一个 ≤4 的位置(降序中“不小于”含义改变)

此时逻辑基于自定义顺序,确保比较规则与排序一致。

基本上就这些。熟练使用 lower_bound 和 upper_bound,能避免手写二分错误,提升编码效率和准确性。注意使用前务必保证序列有序。

以上就是C++ lower_bound与upper_bound用法_C++有序序列的二分查找利器的详细内容,更多请关注其它相关文章!


# 降序  # 养生酒营销推广策略分析  # 淄博网站平台建设  # 龙岗网站推广流程模板  # 隆尧哪里有网站建设标准  # 佛山品牌网站建设报价  # 交友网站发展建设  # 杭州代理商关键词排名  # 达州网站建设设计  # 句容无锡全网营销推广  # 曼秀雷敦营销推广方案  # 解决方法  # 首个  # c++  # 重写  # 值为  # 升序  # 有什么  # 自定义  # 迭代  # 第一个  # 排列  # 工具  # 编码  # go  # 二分查找 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: c++ dfs和bfs代码 c++深度广度优先搜索算法  必由学官方网站入口 必由学学生教师共用登录通道  2026年CSGO开箱网站推荐 CSGO开箱平台精选  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  2026春节假期票务安排_2026春节放假购票指南  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  b站如何看历史记录_b站观看历史找回方法  蛙漫移动版在线看 蛙漫手机浏览器直达入口  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  学习通在线学习平台 学习通网页版直接进入课程中心  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  夸克浏览器图书入口 夸克手机浏览器阅读入口  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  必由学在线入口 必由学网页版快速登录入口  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  在Go Martini框架中高效服务动态生成图像的实践指南  J*a里如何使用forEach遍历Map_Map遍历方法说明  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  12306选座系统怎么选连座_12306选座多人连坐操作方法  CSS布局中意外空白:解决padding-top导致的顶部间距问题  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  整合Supabase认证与Django模型:跨模式迁移的解决方案  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  在Socket.IO连接中实现Access Token自动更新与动态重连  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  Pandas DataFrame 多条件优先级排序与排名  Win11怎么开启省电模式_Win11电池节电模式自动开启  c++20的std::jthread是什么_c++可中断线程与RAII式管理  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  小米Civi 4录制视频过暗_小米Civi 4亮度优化  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  BetterDiscord插件中安全更新用户简介的实践指南  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  Python模块化编程:有效管理依赖与避免循环引用  ArrayList与LinkedList操作复杂度详解:遍历与修改 

搜索