lower_bound&upper_bound - 二分查找函数
它们是C++自带的函数,用于在有序的数列里进行查找。注意,一定是有序的
它们使用的是二分查找的方法,时间复杂度为O(logn),效率很高
使用它们要加上算法头文件,当然,可以使用万能头文件也可以
#include<algorithm> // 算法头文件
#include<bits/stdc++.h> //万能头文件
先了解一下它们的区别
lower_bound - 数列递增序时查找大于等于查找数的第一个数,递减则查找小于等于查找数的第一个数
upper_bound - 数列递增序时查找严格大于查找数的第一个数,递减则严格小于等于查找数的第一个数
再看下使用格式
可以看出两者使用格式基本相同
lower_bound(begin, end, num);
upper_bound(begin, end, num);
但是它们的返回值是指针或迭代器,我们要想获取下标还要再减去首地址,知道了下标也就可以获得具体指了
举几个例子便于理解
数组内使用:
int a[5] = {1, 2, 3, 4, 5};
int p = lower_bound(a, a+5, 3)-a; //p=2
int num = a[p]; //num=3
vector内使用
vector<int> v;
for(int i=1; i<=5; i++)
v.push_back(i);
int p = lower_bound(v.begin(), v.end(), 3)-v.begin(); //p=2
int num = v[p]; //num=3
补充说明
在递减序数列中使用中要加上"greater<type>()"
lower_bound(begin, end, num, reater<type>());
upper_bound(begin, end, num, reater<type>());
如有疑问欢迎在下方评论区提出
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。