upper_bound()函数与lower_bound()函数

函数原型

upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__val)
upper_bound(_ForwardIterator __first, _ForwardIterator __last,const _Tp &__val, _Compare __comp)
lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__val)
lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__val,_Compare __comp)

函数解释:
两个函数底部都由二分搜索实现,用于在有序数组中搜索。
在从小到大排列的数组中,upper_bound()函数搜索第一个大于val值的元素,并返回其迭代器,如果没有符合条件的元素返回END()。
在从小到大排列的数组中,lower_bound()函数搜索第一个大于等于val值的元素,并返回其迭代器,如果没有符合条件的元素返回END()。
实现比较函数重载
数组中的元素必须能用使用’<'运算符,如果想要对自定义的结构体进行搜索则需要自定义函数,注意:无论是upper_bound还是lower_bound一律都用’<'运算符。

class T{
public:
    int a;
    int b;
};
bool comp(T* t1, T* t2){
    return t1->a < t2->a;//只用第一个数字判断
}
T* val = new T*(1,2);
vector<T*> v;
upper_bound(v.begin(),v.end(), val,comp);//第一个大于val->a的元素
lower_bound(v.begin(),v.end(), val,comp);//第一个大于等于val->a的元素

在倒序中搜索
如果想要在从大到小排序的数组中使用二分搜索,也同样需要重写比较函数。注意:upper_bound(),lower_bound()比较函数符号都应为‘>’。

bool comp(int a, int b){
    return a > b;
}

此时,upper_bound()函数表示第一个小于val的值,lower_bound()表示第一个小于等于val的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值