equal_range用法

本文深入探讨了C++ STL中的equal_range函数,解释了其如何在已排序的区间内查找与指定值等同的元素,并返回这些元素形成的区间的边界。通过示例代码演示了如何使用equal_range函数,以及在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下,value可插入的第一个位置(亦即lower_bound),j则是在不破坏次序的前提下,value可插入的最后一个位置(亦即upper_bound),因此,[i,j)内的每个元素都等同于value,而且[i,j)是[first,last)之中符合此一性质的最大子区间

   如果以稍许不同的角度来思考equal_range,我们可把它想成是[first,last)内"与value等同"之所有元素形成的区间A,由于[fist,last)有序(sorted),所以我们知道"与value等同"之所有元素一定都相邻,于是,算法lower_bound返回区间A的第一个迭代器算法upper_bound返回区间A的最后一个元素的下一个位置算法equal_range则是以pair的形式将两者都返回
   即使[fist,last)并未含有"与value等同"之任何元素,以上叙述仍然合理,这种情况下,"与value等同"之所有元素形成的,其实是一个空区间,在不破坏次序的情况下,只有一个位置可以插入value,而equal_range所返回的pair,其第一和第二(都是迭代器)皆指向该位置。
  1. // map::equal_elements
  2. #include <iostream>
  3. #include <map>
  4. using namespace std;

  5. int main ()
  6. {
  7.   map<char,int> mymap;
  8.   pair<map<char,int>::iterator,map<char,int>::iterator> ret;

  9.   mymap['a']=10;
  10.   mymap['b']=20;
  11.   mymap['c']=30;

  12.   ret = mymap.equal_range('b');

  13.   cout << "lower bound points to: ";
  14.   cout << ret.first->first << " => " << ret.first->second << endl;

  15.   cout << "upper bound points to: ";
  16.   cout << ret.second->first << " => " << ret.second->second << endl;

  17.   return 0;
  18. }
运行结果:
  1. lower bound points to: 'b' => 20
  2. upper bound points to: 'c' => 30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值