STL中std::set、std::map的lower_bound和upper_bound

STL中std::set、std::map的lower_bound和upper_bound


std::set::lower_bound 返回给定值在set中第一个 大于等于该值的迭代器
std::set::upper_bound 返回给定值在set中第一个 大于该值的迭代器
第一次见介绍这两个函数看的 很迷惑,都返回了包含 大于关键字的迭代器,跟我们理解的low与up相对的概念不太相同。之后又发现了一篇 文章,专门说明这么设计的原因。感觉有必要记录一下,免得以后又忘记了。

std::set::upper_bound(T value)//返回set中第一个大于value的值的迭代器
std::set::lower_bound(T value)//返回set中第一个大于等于value的值的迭代器
//这么设计没有啥问题,就是第一眼看上去特别别扭。
//std::map, std::set以及可重复set与map 均存在该函数
//具体应用(查找某个值在容器内出现的次数)
{
  	auto begin = Set.lower_bound(value);
  	auto end = Set.upper_bound(value); 
  	if(begin == Set.end())return 0;//只需要判断begin即可(当然不判断也可以),只要begin有效,end不需要一定有.如果不存在value,begin == end.
 	auto numOfValue = end-begin;//无效,set<int>::iterator 没有重载'-'
}
//查找一个数字区间,即查找数字范围处于[value1, value2]的数字
{
    auto begin  = Set.lower_bound(value1);
    auto end = Set.upper_bound(value2);
    if(Set.end() == begin)return 0;//如果不存在value1和value2,begin == end.
    for(auto iter = begin; iter<end; ++iter)cout<<*iter<<endl;
    return end-begin;    //无效,set<int>::iterator 没有重载'-'
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值