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
posted @ 2025-08-19 21:42  左边之上  阅读(41)  评论(0)    收藏  举报