您的位置:首页 > 编程语言 > C语言/C++

C++中lower_bound函数和upper_bound函数

2018-01-02 23:41 375 查看
lalala

我来更博了 吼吼哈嘿

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。
int a[]={0,1,2,2,3};
printf("%d\n",lower_bound(a,a+5,2,cmp)-a);
printf("%d\n",upper_bound(a,a+5,2,cmp)-a);

结果:2 4

lower的意义是对于给定的已经排好序的a,key最早能插入到那个位置

0 1 | 2 2 3 所以2最早插入到2号位置

upper的意义是对于给定的已经排好序的a,key最晚能插入到那个位置

0 1 2 2 | 3 所以2最晚插入到4号位置

加了比较函数:

bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int a[]={0,1,2,2,3}; printf("%d\n",lower_bound(a,a+5,2,cmp)-a); printf("%d\n",upper_bound(a,a+5,2,cmp)-a);return 0 ;
}


结果仍然是2 4 ,可以得出一个结论,cmp里函数应该写的是小于运算的比较

 

bool cmp(int a,int b)
{
return a<=b;
}
int main()
{
int a[]={0,1,2,2,3}; printf("%d\n",lower_bound(a,a+5,2,cmp)-a); printf("%d\n",upper_bound(a,a+5,2,cmp)-a);return 0 ;
}



结果是4 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM 积少成多