当前位置: 首页 > news >正文

二分函数 lower_bound upper_bound

二分查找相关的函数主要定义在 <algorithm> 头文件中,用于在有序序列中快速查找元素,时间复杂度为 O(log n)。最常用的二分函数有以下三个:

1. lower_bound

  • 功能:在有序序列中查找第一个大于等于目标值 val 的元素,返回其迭代器。
  • 前提升序。 
int main() {vector<int> v = {1, 3, 5, 7, 9};  // 升序排列int val = 5;// 查找第一个 >=5 的元素auto it = lower_bound(v.begin(), v.end(), val);if (it != v.end()) {cout << "找到元素位置:" << it - v.begin() << ",值:" << *it << endl;// 输出:找到元素位置:2,值:5}return 0;
}

2. upper_bound

  • 功能:在有序序列中查找第一个大于目标值 val 的元素,返回其迭代器。
  • 前提升序

3. equal_range

  • 功能:在有序序列中查找与目标值 val 相等的所有元素的范围,返回一个 pair
    • first:指向第一个大于等于 val 的元素(等同于 lower_bound 的结果)。
    • second:指向第一个大于 val 的元素(等同于 upper_bound 的结果)。
  • 用途:快速获取所有等于 val 的元素(适合有重复元素的场景)。

4.自定义比较器

可通过第四个参数指定比较规则(如降序序列): 

// 使用 greater<int>() 作为比较器(适配降序)
auto it = lower_bound(v.begin(), v.end(), 5, greater<int>());

不适用的容器

以下容器因不满足条件,不能使用二分函数

1. 无序容器
  • unordered_set / unordered_multiset:元素无序,不符合二分查找的前提。
  • unordered_map / unordered_multimapkey 无序,无法使用二分函数。
2. 适配器容器
  • stackqueuepriority_queue:不支持迭代器遍历(屏蔽了内部元素的直接访问),无法传递 begin() 和 end()

 

http://www.xdnf.cn/news/1193383.html

相关文章:

  • 21-ospf多区域
  • 【Bluedroid】btif_av_sink_execute_service之服务器禁用源码流程解析
  • Apache Doris Data Agent 解决方案:开启智能运维与数据治理新纪元
  • 2025年入局苹果Vision Pro开发:从零到发布的完整路线图
  • LeetCode 刷题【15. 三数之和】
  • 如何关闭Windows自动更新?【图文详解】win10/win11关闭自动更新
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • Linux——线程同步
  • CT、IT、ICT 和 DICT区别
  • 【架构】Docker简单认知构建
  • 【科研绘图系列】R语言绘制误差连线散点图
  • 秋招Day19 - 分布式 - 分布式事务
  • 生产环境使用云服务器(centOS)部署和使用MongoDB
  • Java操作Excel文档
  • opencv学习(图像金字塔)
  • 背包问题及 LIS 优化
  • 告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
  • C#编程基础:运算符与结构详解
  • 【Android】相对布局应用-登录界面
  • 2025.7.26字节掀桌子了,把coze开源了!!!
  • window下MySQL安装(三)卸载mysql
  • Fast_Lio 修改激光雷达话题
  • VLAN的划分(基于华为eNSP)
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • 尝试几道算法题,提升python编程思维
  • Linux内核设计与实现 - 课程大纲
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • 使用Spring Boot创建Web项目
  • 学习嵌入式的第三十二天-数据结构-(2025.7.24)IO多路复用
  • 开发者说|RoboTransfer:几何一致视频世界模型,突破机器人操作泛化边界