首页 > 其他分享 >equal_range用法

equal_range用法

时间:2023-04-10 15:03:07浏览次数:50  
标签:last bound value equal range 用法 first


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. 
6. int main ()
7. {
8. <char,int> mymap;
9. <map<char,int>::iterator,map<char,int>::iterator> ret;
10. 
11. ['a']=10;
12. ['b']=20;
13. ['c']=30;
14. 
15. = mymap.equal_range('b');
16. 
17. << "lower bound points to: ";
18. << ret.first->first <<  " => " << ret.first->second << endl;
19. 
20. << "upper bound points to: ";
21. << ret.second->first <<  " => " << ret.second->second << endl;
22. 
23. ;
24. }


运行结果:

1. lower bound points to: 'b'  => 20
2. upper bound points to: 'c'  =>

标签:last,bound,value,equal,range,用法,first
From: https://blog.51cto.com/u_130277/6180913

相关文章

  • Golang基础-- select的用法
    select是golang在语言层面提供的多路IO复用的机制,其可以检测多个channel是否ready三个题目示例来说明一下select的大概作用:题目一:声明两个channel,分别为chan1和chan2,依次启动两个协程,分别向两个channel中写入一个数据就进入睡眠。select语句两个case分别检测chan1和chan2是......
  • golang 中的 goto 用法和使用场景(转)
    转自:golang中的goto场景一:跳出多重循环packagemainimport"fmt"funcmain(){forx:=0;x<10;x++{fory:=0;y<10;y++{ify==2{//跳转到标签gotobreakHere}......
  • #yyds干货盘点#Linux中root与sudo的用法与区别(学习笔记)
    Linux下面有两个概念可能大家接触的比较多,一个是sudo命令,还有一个是root账户。Sudo 命令可以以最高权限执行命令,而root账户下所有命令都有最高权限,也就是相当于所有命令都默认加了sudo。那么 sudo和root的区别到底是什么呢,为什么我们建议使用sudo而不是直接使用roo......
  • Golang基础--defer的用法
    defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出执行。三个示例:import"fmt"funcmain(){varinit=1deferfmt.Println(init)init=2}输出1。延迟函数fmt.Println(aInt)的参数在defer语句出现时就已经确......
  • Pole Arrangement uva1638
    有高度分别为1到n的n根杆子排成一行。如果你从左侧或右侧看这些杆,较小的杆被较高的杆遮挡。给出杆子的数量n,从左能看到的杆子数量L,从右能看到的杆子数量R,求杆子有多少种排列方式  考虑高度1~n的柱子,把高度1的插入2~i的某个排列中转移f[i][j][k]=f[i-1][j-1][k]+f[i-......
  • Appium-capability进阶用法
    官方解释:http://appium.io/docs/en/writing-running-appium/caps/ 高级用法:newCommandTimeout:命令开始到命令结束的时间(秒)如设置5分钟:desired_caps['newCommandTimeout']=300udid:满足appium多设备时使用,默认使用第一个设置,adbdevices查看多个设备如使用设备......
  • Django笔记十九之manager用法介绍
    本文首发于微信公众号:Hunter后端原文链接:Django笔记十九之manager用法介绍首先介绍一下manager的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用manager来实现。比如我们在前面的笔记中介绍的model的create()、update()等方法,Blog.objects.create()中......
  • OrangeX4-HyperSnips快捷命令
    ==fraction==simplefractionSnippetsnippet//"Fraction"iAm\\frac{${1:${VISUAL}}}{$2}$0endsnippetexampleinput://latex:$\frac{}{}$visual:\(\frac{}{}\)fractionno'()'Snippetsnippet`((\d+)|(\d*)(\\)?([A-Za-z!]+)......
  • css Position用法
    相对位置和绝对位置现有3个div如下<style>.brother{width:200px;height:200px;background-color:yellow;}.father{width:200px;height:200px;background......
  • Retrofit 的基本用法
    一、添加依赖和网络权限添加依赖implementation'com.squareup.retrofit2:retrofit:2.9.0'implementation'com.squareup.retrofit2:converter-gson:2.9.0'//可选implementation'com.squareup.okhttp3:logging-interceptor:4.9.3'第一条依赖是下载Retrofit、Ok......