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,其第一和第二(都是迭代器)皆指向该位置。
- // map::equal_elements
- #include <iostream>
- #include <map>
- using namespace std;
- int main ()
- {
- map<char,int> mymap;
- pair<map<char,int>::iterator,map<char,int>::iterator> ret;
- mymap['a']=10;
- mymap['b']=20;
- mymap['c']=30;
- ret = mymap.equal_range('b');
- cout << "lower bound points to: ";
- cout << ret.first->first << " => " << ret.first->second << endl;
- cout << "upper bound points to: ";
- cout << ret.second->first << " => " << ret.second->second << endl;
- return 0;
- }
运行结果:
- lower bound points to: 'b' => 20
- upper bound points to: 'c' => 30
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2012-09-26 VC++中subclassdlgitem函数的功能及用法
2012-09-26 MFC Attach()函数和Detach()函数 .
2012-09-26 选择目录对话框和选择文件对话框
2012-09-26 MFC中CWnd类及其派生类对话框、消息处理、窗口操作