不加比较函数的情况:
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里函数应该写的是小于运算的比较
如果加上了等号,lower和upper两个函数功能就刚好反过来了:
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
理解C++中lower_bound和upper_bound函数的使用与比较函数的作用
本文深入探讨了C++标准库中的lower_bound和upper_bound函数,解释了它们在查找有序数组中插入点的功能,并通过比较函数展示了如何灵活调整这些函数的行为,以满足特定的查找需求。
1287

被折叠的 条评论
为什么被折叠?



