1

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>());

如有疑问欢迎在下方评论区提出


zhatcx
169 声望2 粉丝

在下程序猿,专攻C++,致力于信息学竞赛