lower_bound and upper_bound

lower_bound()返回这个有序序列中第一个大于等于value的位置

upper_bound()返回这个有序序列中第一个大于vlaue的位置


具体STL库好像用的二分查找

举个例子

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
#define N 4020
#define INF 0x3f3f3f3f
#define MOD 10000
using namespace std;
int main()
{
    int arr[20];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>arr[i];
    sort(arr,arr+n);
    for(int i=0;i<n;i++)
        printf("%3d ",i);
    puts("");
    for(int i=0;i<n;i++)
        printf("%3d ",arr[i]);
    puts("");
    int l,u,t=10;
    while(t--)
    {
        int val;
        scanf("%d",&val);
        l=lower_bound(arr,arr+n,val)-arr;//如果都在这个数大于所有数,则返回的是最后一个加1
        u=upper_bound(arr,arr+n,val)-arr;
        printf("l=%d ,u=%d\n",l,u);
    }
}

输入数据

10 

1 2 8 6 7 56 75 32 12 92

下标 0     1    2    3    4     5       6     7      8       9

序列 1     2    6    7    8    12    32    56    75    92


查找 98

返回l=10  r=10

查找92

返回l=92  r=10

查找0

返回l=0     r=0

查找8

返回l=4    r=5;

这个数据表明若查找的值在有序序列最大值之外 会返回一个指向(数组末尾+1)指针


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值