lower_bound和 upper_bound的头文件是#include<algorithm>

lower_bound

返回第一个大于等于 x 的数的地址/迭代器

upper_bound

返回第一个大于 x 的数的地址/迭代器
————————————————————————————————————————————————————————

两者都是类似binary-search(二分)来查找 ,用法分为两部分说,

数组

这里就拿lower_bound举例,upper_bound用法一样

auto it = lower_bound(vec.begin(),vec.end(),x)

可以看出就三个参数,在前闭后开区间 [vec.begin(),vec.end()) 进行二分查找,返回大于或等于 x 的第一个元素位置。如果所有元素都小于 x ,则返回 vec.end() 的位置

如果要得到最后大于等于 x 的元素下标,只需要减去初位置就可以了;

int pos = lower_bound(vec.begin(),vec.end(),x) - vec.begin();

测试代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;int main() {vector<int> vec(5);int num = 10;for (int i = 0; i < 5; ++i) vec[i] = num++;vector<int>::iterator it = lower_bound(vec.begin(), vec.end(), 11);cout << "大于等于11的数为:" << *it << endl;int pos = lower_bound(vec.begin(), vec.end(), 11) - vec.begin();cout << "该数的下标为:" << pos << endl;return 0;
}

map/set

这里用法有点不同,这里拿set举例
相对于数组以算法的形式使用,
set 输入时已经建好树(不需要algorithm头文件), 而algorithm要多一个类似建树的过程
s所以 set 有 s.lower_bound(x) 算法,所以使用该函数肯定 set 快一点
作用:

lower_bound
二分查找一个有序数列,返回第一个大于等于x的数,如果没找到,返回末尾的迭代器位置

upper_bound
二分查找一个有序数列,返回第一个大于等于x的数,如果没找到,返回末尾的迭代器位置

可以发现起始功能还是一样的,但是参数有些不同,

set::lower_bound(x):返回set中第一个大于或等于 x 的迭代器指针set::upper_bound(x):返回set中第一个大于 x 的迭代器指针

可以看出,只需要比较的 x 就可以了;
测试代码:

#include<iostream>
#include<map>
#include<vector>
using namespace std;int main() {map<int, int> hash;vector<int> vec{1,2,1,3,4,5,6,4,3,2,5,4,3,2,11};for (int i : vec) hash[i]++;map<int, int>::iterator it = hash.lower_bound(10);cout << "大于等于10的数为:" << it -> first << endl;cout << "该数有" << it -> second << "个" << endl;return 0;
}

lower_bound和 upper_bound 用法(STL)相关推荐

  1. upperbound找不到_关于lower_bound( )和upper_bound( )的常见用法

    头文件:#include lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begi ...

  2. lower_bound()与upper_bound()

    lower_bound和upper_bound函数用法 一,在数组中使用lower_bound()upper_bound() 二.STL中的lower_bound()和upper_bound() lo ...

  3. 【C++ 二分函数——lower_bound upper_bound用法】

    大家好,我是Amy~ 好久不见啊(主要是我太懒了,这几天比较忙,不想更新--再加上快开学了,我的作业还没有做完QAQ)你们的暑假作业都做完了吗(哦对,大佬不用做作业QAQ) 那今天我们就接着上次的bi ...

  4. lower_bound和upper_bound的用法

    二分查找算法可以解决最简单的二分查找问题:a数组单调递增,并且其中没有重复的数值.我们遇到的实际问题可能就没有这么简单,可能会有重复的数值.比如a数组里有3个5.这时我们查找5就有一个问题:到底返回哪 ...

  5. STL中的lower_bound和upper_bound的理解

    STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置. 譬如,值val在容器内的时候,从 ...

  6. 关于lower_bound( )和upper_bound( )的常见用法

    ower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begin,end,num):从数组 ...

  7. lower_bound( )和upper_bound( )的基本用法

    lower_bound( )和upper_bound( )是C++ STL模板库中的函数,其作用可以看作是一个简单的二分模板. 基本使用方法: lower_bound: 参数:lower_bound( ...

  8. C++ STL: lower_bound 和 upper_bound

    接口声明 以下有两个不同的版本 lower_bound template <class ForwardIterator, class T>ForwardIterator lower_bou ...

  9. lower_bound( )和upper_bound( )的常见用法

    ower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begin,end,num):从数组 ...

最新文章

  1. 如何设计电桥传感器驱动电路?
  2. C++成员函数在内存中的存储方式
  3. 计算机录入速度标准,怎么提高电脑录入速度?
  4. 【深度学习】真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件...
  5. 计算机课程设计课程计划书,计算机汇编语言课程设计计划书.doc
  6. 我的Go+语言初体验——goplus环境问题锦集(一)
  7. li标签之间的空隙问题(转)
  8. (转)黑幕背后的Autorelease
  9. Hook鼠标和键盘的使用
  10. C#首席设计师Anders Hejlsberg专访
  11. csv 20位数据 如何打开可以预览完整数字_条码打印软件如何批量制作MSI Plessey码...
  12. java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader couldn‘t find “libtinyWRAP.so“
  13. TCPUDP测试工具的使用
  14. GRE Over IPSec技术
  15. 基于SSM java学校教务管理系统
  16. openwrt配置内核驱动_OpenWrt添加驱动模块
  17. MongoBD 系列(1) —— 初识 MongoDB
  18. The Shawshank Redemption-3
  19. 如何在虚拟机安装的Win10系统里快速打开【此电脑】图标?(图文详解)
  20. java中的参数传递(只有值传递没有引用传递)

热门文章

  1. 运维工程师仪表免费换新活动开始了…任何品牌万用表、钳表、测温仪都可以换福禄克万用表、钳表、测温仪...
  2. 边缘数据中心2024年市场规模将超过130亿美元
  3. php 登陆 才能查看,WordPress登录后才能查看网站内容,未登录跳转登录页面教程...
  4. 成功解决Fit Failed Warning: Estimator fit failed. The score on this train-test partition for these param
  5. 成功解决local variable 'str' referenced before assignment
  6. Py之pixellib:pixellib库的简介、安装、经典案例之详细攻略
  7. 成功解决VirtualBox is not installed. Please re-run the Toolbox Installer and try again.
  8. ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注
  9. DL之BM:BM的前世今生
  10. 从零开始的自学之路——css选择器