std::map中的lower_bound与upper_bound

36 篇文章 2 订阅

最近在工作中遇到了std::map中的lower_bound与upper_bound,再次记录下其功能和使用方式。

std::map<char, int> mp;

mp.lower_bound<key> : 返回的是第一个大于、等于key的iterator,如果没有则返回空。

mp.upper_bound<key> :返回的是第一个大于key的iterator,如果没有,则返回空

例子如下:

// map::lower_bound/upper_bound
#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> mymap = {{'a', 20}, {'b', 40}, {'c', 60}, {'d', 80}, {'e', 100}};

// 否则使用下面的赋值方式
#if 0
  mymap['a']=20;
  mymap['b']=40;
  mymap['c']=60;
  mymap['d']=80;
  mymap['e']=100;
#endif

  auto itlow = mymap.lower_bound('b');  // itlow points to b
  auto itup = mymap.upper_bound('d');   // itup points to e (not d!)

  std::cout << "itlow " << itlow->first << " => " << itlow->second << '\n';
  std::cout << "itup " << itup->first << " => " << itup->second << '\n';

  auto upper = mymap.upper_bound('e');
  std::cout << "upper " << upper->first << " => " << upper->second << '\n';

  mymap.erase(itlow,itup);        // erases [itlow,itup)

  std::cout << "print content " << '\n';
  for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';

  return 0;
}

结果:

总结:

1、使用upper_bound(key)时,如果没有找到大于key的iterator时,返回为空

2、lower_bound(key)返回的是大于、等于key的iterator,如果没有,返回空。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值