不加比较函数的情况:
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);
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 ; }
如果加上了等号,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 ; }