当然,lower-bound还有更加高级的用法,你可以使用一个lower_bound(b, e, x, cmp)在找b到e中第一个不满足cmp(a, x)的元素a的位置,其中cmp可以是你自己定义的一个比较器。源代码为 template<typename_ForwardIterator,typename_Tp,typename_Compare> _ForwardIterator __lower_bound(_ForwardIterator __first, _...
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
若需自定义比较函数,如按Person结构体中的成员变量进行比较,可使用lower_bound函数的另一种形式,传递一个函数对象作为参数。定义自定义比较函数需满足条件:在运行时使用该函数比较元素大小。示例:定义Person结构体与比较函数person_cmp,依据age成员变量进行比较。a的age小于b的age时,person_cmp返回true...
void cmp( int a, int b ) { return a > b; } int* p = lower_bound( x+1, x+10+1, x, cmp ); //由大于等于改为小于等于 1. 2. 3. 4. 5. 6. 或 int* p = lower_bound( x+1, x+10+1, x, greater<int>() ); //由大于等于改为小于等于 1. 二、基本思想与证明 以下以最...
bool cmp(const int& e, const int& val) {return e< val; } //找到一个 让 cmp 返回 false 的元素的下标, 即第 1 个 >= 15 的元素 vectorv = {100,16,18,17,11,13,10,5,1,2,3,5,6,4,3,1,2 }; auto it = lower_bound(v.begin(), v.end(), 15,cmp); ...
lower_bound(起始位置first,结束位置last,目标元素val); upper_bound(起始位置first,结束位置last,目标元素val); //lower_bound/upperbound的返回值是一个地址值,若要得到目标元素的下标,直接减去数组首地址的值即可 根据C++STL的尿性,同理可得,在lower_bound和upper_bound中我们同样可以添加cmp来进行自定义比较: ...
structcmp_lower{booloperator()(inta,intb){returnindex[a]
lower_bound(a+1,a+1+n,x,cmp);boolcmp(constint&a,constint&b){returna>b;} 当然也可以直接 lower_bound(a+1,a+1+n,x,greater<int>()); 2.1 upper_bound() 传入参数:upper_bound(begin, end, num) 函数含义:从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,...
#include<iostream> #include<algorithm> using namespace std; int a[] = {2,1,3,4,5,1}; int ss[] = {2,1,3,4,5,1}; bool cmp(int a,int b) { return a < b; } //lower_bound(a,a+n,x) - a 返回第一个大于等于x 当前目标值指针 //upper_bound(a,a+n,x) - a 返回第一...
用lower_bound二分查找找到j,否则会超时。 #include<iostream> #include<algorithm> using namespace std; struct node { int l,r,x,R; }a[50005]; bool cmp(node aa,node bb) { if(aa.l==bb.l) return aa.r<bb.r; return aa.l<bb.l; ...