C++ lower_bound/upper_bound用法解析
1. 作用
lower_bound和upper_bound都是C++的STL库中的函数,作用差不多,lower_bound所返回的是第一个大于或等于目标元素的元素地址,而upper_bound则是返回第一个大于目标元素的元素地址。
从定义就可以看出两者的差别只差在是否取等的的地方 那何必要设置两个函数呢(bushi
2.使用条件
用lower_bound/upper_bound进行二分查找时必须保证查找区间为升序序列!
什么是升序序列?你小学老师没教过你吗(bushi 举个例子你就明白了:

从第一个元素开始,后面的每一个元素都会大于等于前面一个元素
显然造成这种限制的原因就是出现在制作STL库的人身上 Orz,因为他所写的比较器是‘<’。
3.用法
lower_bound和upper_bound的用法与sort类似:
1 lower_bound(起始位置first,结束位置last,目标元素val);
2 upper_bound(起始位置first,结束位置last,目标元素val);
3 //lower_bound/upperbound的返回值是一个地址值,若要得到目标元素的下标,直接减去数组首地址的值即可
根据C++STL的尿性,同理可得,在lower_bound和upper_bound中我们同样可以添加cmp来进行自定义比较:
1 lower_bound(a,a+n,2,cmp);
2 upper_bound(a,a+n,2,cmp);
当然你在使用lower_bound/upper_bound时要注意其二分查找的区间:
以上面的例子为例,他们的区间都是 [a,a+n)
不要问我[)是什么,这不是小学二年级教的吗(doge,‘[’ 就是大于等于的意思,‘)’ 就是小于的意思,请举一反三。
有人可能会说了,lower_bound和upper_bound只能查找升序序列岂不是很废?那你一定是没有好好学sort ,显然,我们可以通过自定义比较函数来实现降序序列的查找:
1 bool cmp(const int& a,const int& b){
2 return a>b;
3 }
4 lower_bound(a,a+n,val,cmp);
5 upper_bound(a,a+n,val,cmp);
或者你可以更简单一些:
lower_bound(a,a+n,val,greater<int>());
upper_bound(a,a+n,val,greater<int>());
最后,如果函数并没有找到目标元素,则会返回last的地址,且last的地址是越界的。
4.思考
https://www.luogu.com.cn/problem/P2249
C++ lower_bound/upper_bound用法解析的更多相关文章
- STL lower_bound upper_bound 用法
1.lower_bound(begin,end,x) 返回第一个>=x的位置,找不到return .end() 2.upper_bound (begin,end,x) 返回第一个>x的位置 ...
- lower_bound && upper_bound
用lower_bound进行二分查找 ●在从小到大排好序的基本类型数组上进行二分查找. 这是二分查找的一种版本,试图在已排序的[first,last)中寻找元素value.如果[first,last ...
- vector 牛逼 +lower_bound+ upper_bound
vector 超级 日白 解决的问题空间问题,可以自由伸缩. 一下用法: 向量大小: vec.size(); 向量判空: vec.empty(); 末尾添加元素: vec.push_back(); / ...
- extern "c"用法解析
转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...
- WordPress的have_posts()和the_post()用法解析
原文地址:http://www.phpvar.com/archives/2316.html 网上找到一篇介绍WordPress的have_posts()和the_post()用法解析的文章,觉得不错! ...
- extern "C" 用法解析
extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...
- mysql group by 用法解析(详细)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- (转载)mysql group by 用法解析(详细)
(转载)http://blog.tianya.cn/blogger/post_read.asp?BlogID=4221189&PostID=47881614 mysql distinct 去重 ...
- STL中的二分查找———lower_bound,upper_bound,binary_search
关于STL中的排序和检索,排序一般用sort函数即可,今天来整理一下检索中常用的函数——lower_bound , upper_bound 和 binary_search . STL中关于二分查找的函 ...
随机推荐
- L O V E
Part of the content comes from the Internet.If there is any infringement, please let me know and I ' ...
- Spring核心思想Ioc和Aop (面试)
Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...
- 面试常问:HTTP 1.0 和 HTTP 1.1 有什么区别?
这篇文章会从下面几个维度来对比 HTTP 1.0 和 HTTP 1.1: 响应状态码 缓存处理 连接方式 Host头处理 带宽优化 响应状态码 HTTP/1.0仅定义了16种状态码.HTTP/1.1中 ...
- 关于Copy On Write Array List,你会安全使用么
摘要:JDK中提供了CopyOnWriteArrayList类,简称COW.为了将读取的性能发挥到极致,CopyOnWriteArrayList读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取 ...
- 【NOI P模拟赛】混凝土粉末(整体二分)
题面 样例输入 5 8 1 1 4 2 2 3 1 2 3 3 1 2 5 1 2 3 3 2 5 2 2 1 2 2 1 3 样例输出 1 0 4 0 1 0 样例解释 题解 比这道题简单了不知多少 ...
- 【读书笔记】15《The Bridge of Madison County》
廊桥遗梦(梅丽尔·斯特里普主演) 罗伯特·詹姆斯·沃勒 99个笔记 The Beginning 美[|diˈklainz]v 辞谢,谢绝(邀请等)( decline的第三人称单数 );(道路.物体 ...
- Homework6
1.问:阅读和了解什么是形式化方法? 答:形式化方法在逻辑科学中是指分析.研究思维形式结构的方法.是把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出各个部分相互联结的方式,抽取出共同的形 ...
- 为什么Index Only Scan却还需要访问表
在实际SQL优化工作中,我们经常会发现SQL 执行计划明明是 "Index Only Scan",但执行计划后面却有 "Heap Fetches: x" ,也就 ...
- kingbaseES R3 集群配置 SSL
案例说明: 本测试是在非生产环境下,在官方没有明确声明支持KingbaseCluster使用ssl的前提下,建议只能在测试环境使用,避免生产环境下直接使用. 数据库版本: TEST=# selec ...
- Unity-编辑器拓展之GUILayout,EditorGUILayout布局 { }
Unity 脚本 API 中文版 链接: https://docs.unity3d.com/cn/2019.4/ScriptReference/ 创建自定义窗口 public class MyWind ...