lower_bound与upper_bound区别
lower_bound与upper_bound
核心概念总结
假设我们有一个已排序的升序数组 ups,我们要查找的值是 val。
| 特性 | lower_bound |
upper_bound |
|---|---|---|
| 中文含义 | 下界 | 上界 |
| 返回值指向 | 第一个 >= val 的元素 | 第一个 > val 的元素 |
| 在存在重复元素时 | 指向第一个 val |
指向最后一个 val 的下一个位置 |
再假设我们有一个已排序的降序数组 downs,我们要查找的值是 val。
| 特性 | lower_bound |
upper_bound |
|---|---|---|
| 中文含义 | 下界 | 上界 |
| 返回值指向 | 第一个 <= val 的元素 | 第一个 < val 的元素 |
| 在存在重复元素时 | 指向第一个 val |
指向最后一个 val 的下一个位置 |
求val的数量:上界-下界
详细解释和示例
#include<bits/stdc++.h>
using namespace std;
const int U=1e5+5;
typedef long long ll;
int ups[10]={0,10,20,20,20,30,40};//升序<,<,<
int downs[10]={0,40,30,20,20,20,10};//降序>,>,>
int n=6;
int main()
{
cout<<"In Ups:"<<endl;
auto itl=lower_bound(ups+1,ups+1+n,20);
auto itu=upper_bound(ups+1,ups+1+n,20);
int thel=itl-ups;
int theu=itu-ups;
int nums=theu-thel;
printf("Lower_bound(ups+1,ups+1+n,20) is %d\n",thel);//第一个>=val的位置
printf("Upper_bound(ups+1,ups+1+n,20) is %d\n",theu);//第一个>val的位置
printf("Nums of 20 is %d\n",nums);//两个相减就是val的数量
cout<<"In Downs:"<<endl;
auto isl=lower_bound(downs+1,downs+1+n,20,greater<int>());
auto isu=upper_bound(downs+1,downs+1+n,20,greater<int>());
int thel2=isl-downs;
int theu2=isu-downs;
int nums2=theu2-thel2;
printf("Lower_bound(downs+1,downs+1+n,20) is %d\n",thel2);//第一个<=val的位置
printf("Upper_bound(downs+1,downs+1+n,20) is %d\n",theu2);//第一个<val的位置
printf("Nums of 20 is %d\n",nums2);
return 0;
}
// 编译常用指令>> g++ -std=c++14 -O2 -Wall code.cpp -o code
结果
In Ups:
Lower_bound(ups+1,ups+1+n,20) is 2
Upper_bound(ups+1,ups+1+n,20) is 5
Nums of 20 is 3
In Downs:
Lower_bound(downs+1,downs+1+n,20) is 3
Upper_bound(downs+1,downs+1+n,20) is 6
Nums of 20 is 3

浙公网安备 33010602011771号