0

0

C++中lower_bound怎么用_C++有序序列查找第一个大于等于元素【检索】

穿越時空

穿越時空

发布时间:2026-02-05 11:56:02

|

708人浏览过

|

来源于php中文网

原创

lower_bound查找失败时返回end()迭代器;需用it!=container.end()检查,不可解引用或当下标用;要求容器已严格有序,且查找与排序的比较函数必须一致。

c++中lower_bound怎么用_c++有序序列查找第一个大于等于元素【检索】

lower_bound 查找失败时返回什么

当目标值比所有元素都大,lower_bound 返回指向容器末尾的迭代器(即 end()),**不是 nullptr-1**。直接解引用这个迭代器会崩溃,必须先检查是否等于 end()

  • vectorarray 等连续容器,可写成:if (it != vec.end()) { /* 找到了 */ }
  • setmap,同样用 it != s.end() 判断,不能用 it == nullptr
  • 若误当成下标使用(比如 vec[distance(vec.begin(), it)]),而未检查 it 有效性,运行时触发 std::out_of_range 或段错误

lower_bound 要求容器必须“真正有序”

lower_bound 不做排序,只依赖已有的顺序。如果传入的 vector 未排序,结果完全不可预测——可能返回任意位置,甚至越界。

  • 常见误操作:调用前忘记 sort(vec.begin(), vec.end())
  • 自定义比较函数时,必须和排序时用的完全一致,否则行为未定义。例如排序用 greater(),查找时却用默认 ,结果无效
  • setmap 内部自动维护有序,可直接用 lower_bound;但 unordered_set 不支持该函数

lower_bound 在 vector 和 set 中的性能与写法差异

两者都叫 lower_bound,但调用方式不同,且底层实现影响使用习惯。

  • vector:必须用全局函数 std::lower_bound(vec.begin(), vec.end(), x),时间复杂度 O(log n),但需随机访问迭代器支持
  • set:用成员函数 s.lower_bound(x),同样是 O(log n),但更安全(无需手动传迭代器范围,也不会传错区间)
  • 别混用:对 set 调用全局 std::lower_bound(s.begin(), s.end(), x) 虽能编译,但效率低(std::lower_bound 对双向迭代器退化为接近线性)

lower_bound 查找浮点数或自定义类型要小心比较精度和严格弱序

浮点数直接比较 == 易出错;自定义类型若比较逻辑不满足“严格弱序”,lower_bound 行为未定义。

玄鲸Timeline
玄鲸Timeline

一个AI驱动的历史时间线生成平台

下载

立即学习C++免费学习笔记(深入)”;

  • 浮点查找建议封装 epsilon 比较:用 lower_bound 配合自定义谓词,如 [eps](double a, double b) { return a
  • 自定义结构体必须确保 operator 满足:非自反(a 为 false)、非对称、传递、可传递等价(即 !(a 视为相等)
  • 若用 pair 等标准类型,其 已满足要求,可直接用

实际用的时候,最容易漏掉的是检查迭代器是否有效,以及混淆全局函数和成员函数的调用形式——尤其在从 vector 切换到 set 时。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

794

2023.08.22

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

396

2023.09.04

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

64

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.27

微信网页版文件传输助手教程合集
微信网页版文件传输助手教程合集

本专题整合了微信网页版文件传输助手教程、入口等等内容,阅读专题下面的文章了解更多详细内容。

15

2026.02.04

微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

10

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

93

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号