一般lower_bound(), upper_bound() 基本用法

定义: algorithm头文件的函数
功能: 二分查找,查询一个数组(vector也可以使用)中大于给定数的位置
条件: 因为是使用二分查找,所以数组必须是有序的(一定是小于) 一定先用sort一下
返回值: 返回目标的地址,所以你不能直接把返回值赋值给谁,一般要减去首地址,这样就得到目标的数组小标(反人类设计qwq),否则你会得到一个 *long long 不能赋值给 int的报错
区别:

  • lower_bounder是找到第一个>=给定数字的位置
  • upper_bounder是找到第一个 严格大于( 没有= ) 给定数的位置

使用:

lowwer_bounder(s+a,s+b,t)
upper_bounder(s+a,s+b,t)
  • s 是数组
  • 第一个参数是查找范围的左边界(左闭区间) ,0就不写了(s)
  • 第二个参数是查找范围的右边界(右开区间,超尾原理)
  • 第三个数据是我们要找的数据
  • 如果找到最后都找不到就返回end,就是ss+b

示例:

s[10]={0,1,2,3,4,4,6,7,8,9}
cout<<lower_bounder(s,s+10,4)-s<<endl
cout<<upper_bounder(s,s+10,4)-s<<endl
cout<<lower_bounder(s,s+10,100)-s<<endl

输出

4
6
10

特殊的lower_bound(), upper_bound() 基本用法

定义: set/multiset中的一个方法
相同: 功能相同
区别: 无需指定查找区间,范围就是整个set/multiset
用法:

auto it=s.upper_bound(a[i]);

查找严格小于或小于等于某数的结果

1.结构体重载<

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;struct s{int t;bool operator < (const s tmp)const{return t>tmp.t;}
}a[20]={1,2,3,4,5,6,7,8,9,10};int main(){sort(a,a+10);   //必须默认顺序排序int pos=upper_bound(a,a+10,s({5}))-a;cout<<a[pos].t;return 0;
}

2.使用greater

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;int a[20]={1,2,3,4,5,6,7,8,9,10};bool cmp(int a,int b){return a>b;
}int main(){sort(a,a+10,cmp);   //必须是从大到小排序// sort(a,a+10);int pos=upper_bound(a,a+10,5,greater<int>())-a;cout<<a[pos];return 0;
}

greater<> & less<>

两个函数的头文件是

  1. 建堆的时候,默认是小根堆,第三个参数用greater会变成大根堆;
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;set<int,greater<int> > s;int main(){s.insert(5);s.insert(4);s.insert(3);s.insert(2);cout<<*s.begin();return 0;
}
  1. 排序的时候,默认是从小到大,但是第三个参数用greater会变成从大到小,而不需要cmp
  2. upper_bound默认是找大于,但是第三个参数用greater就是找小于
  3. 优先队列默认是从大到小,但是用greater会变成从小到大,注意与一般的相比要加一个vector<int>
priority_queue <int,vector<int>,less<int> > p;
priority_queue <int,vector<int>,greater<int> > q;

就当默认是less,相反就加greater

lower_bound, upper_bound, greater, less 用法相关推荐

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

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

  2. pair用法 lower_bound upper_bound

    int a,b;pair<int,int>p;cin>>a>>b;p=make_pair(a,b);cout<<p.first<<" ...

  3. upper_bound 和 lowwer_bound 用法

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

  4. c++ 二分查找的函数 lower_bound upper_bound binary_search

    简介 C++ STL 中二分查找函数主要有这三种: lower_bound() upper_bound() binary_search() 这三个函数都运用于有序区间. 用法 1. lower_bou ...

  5. STL源码剖析 lower_bound | upper_bound | binary_search

    lower_bound 二分查找的一种版本,试图在已经排序的区间内查找元素value,如果区间内存在和value数值相等的元素,便返回一个迭代器,指向其中的第一个元素. 如果没有数值相等的元素,会返回 ...

  6. lower_bound()/upper_bound()函数(C++)

    文章目录 1.lower_bound()/upper_bound()函数简单介绍 2.lower_bound()/upper_bound()函数分析 3.lower_bound()/upper_bou ...

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

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

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

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

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

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

最新文章

  1. web开发(二十一)之自定义拦截器的使用
  2. 【一天一个shell命令】【cut】
  3. 应用程序无法启动_Windows 10触发启动应用程序警报,以避免系统变慢
  4. mysql 精度_mysql-笔记 精度
  5. 德国超级计算机中心,德国:强化人工智能能力建设 加大高性能计算网络投资...
  6. 科大奥锐实验报告霍尔效应_大学物理实验报告系列之霍尔效应
  7. 包含内部类的.java文件编译后生成几个.class文件
  8. springboot拦截了静态资源css,js,jpg,png等
  9. java 怎么调用js代码_在Java中直接调用js代码
  10. 测试Android应用程序的逆向方法和寻找攻击面的技巧
  11. 凸优化第九章无约束优化 9.1 无约束优化问题
  12. UNP Chapter 3 - 套接口编程简介
  13. wps中将文档输出为pdf_简单4步通过WPS2013 API将Word,Excel和PPT文件转换成PDF文件
  14. 桃李春风一杯酒,江湖夜雨十年灯。
  15. 今天,给大家推荐一下我的好友:爱迪生
  16. 实现全站http到https的301转向(实测有用)
  17. 编码技巧——使用Easypoi导出Excel、多sheet
  18. 销售思路杂谈(产品卖不出去,不好卖怎么办)
  19. 外星人游戏本哪一款好?追求完美体验首选X系列
  20. python爬虫爬取百度搜索结果,Bob blog

热门文章

  1. 请写一个关于低脂猴头菇牛肉酱加工工艺优化的论文框架
  2. 街电入局全新领域,推出共享电动自行车充电桩项目
  3. 电池-外部DC双电源供电设备电源自动切换电路分享(上)-转
  4. shell正则表达式提取数字
  5. 【canvas 图形画布标签】(使用详解)
  6. java 多线程列子_java 多线程例子
  7. 使用JS实现跨列显色
  8. web数字地球_成为地球上最糟糕的Web设计师的13个步骤
  9. 【打卡第243道】【二叉树】【剑指Offer】:JZ8 二叉树的下一个结点
  10. 基于R语言的seasonal包使用手册_10.na.x13(x)