equal_range根据键值,返回一对迭代器的pair对象。如果该键值在容器中存在,则pair对象中的第一个迭代器指向该键关联的第一个实例,第二个迭代器指向该键关联的最后一个实例的下一位置。如果找不到匹配的元素,则pair对象中的两个迭代器都将指向此键应该插入的位置。总之,equal_range返回迭代器位置区间 [ lower_bound, upper_bound ) 。见以下例子:

#include <iostream>
#include <map>
int main ()
{
std::multimap<char,int> my_multimap;
my_multimap.insert(std::make_pair('a',));
my_multimap.insert(std::make_pair('a',));
my_multimap.insert(std::make_pair('a',));
my_multimap.insert(std::make_pair('a',));
my_multimap.insert(std::make_pair('b',));
my_multimap.insert(std::make_pair('c',));
my_multimap.insert(std::make_pair('c',));
std::cout << my_multimap.size() << std::endl;
std::pair<std::multimap<char,int>::iterator,std::multimap<char,int>::iterator> ret;
ret=my_multimap.equal_range('a');
for(std::multimap<char,int>::iterator it=ret.first;it !=ret.second;it++){
std::cout << it->first << " => " << it->second << '\n';
}
return ;
}

输出:

a =>
a =>
a =>
a =>

从上面例子可以看出,使用了multimap是可以存储重复的键值的,所以使用equal_range开始找'a'键,发现满足条件的有4个,这时返回2个迭代器,第一个迭代器是'a':10这一组键值对,第二个迭代器是最后一个'a':40这组满足条件的键值对的后一个键值对'b':10。因此迭代打印时就会得到一堆输出。

如果没有找到满足条件的键值,那么就会返回最应该插入的位置,这时第一个迭代器和第二个迭代器是相等的。
如果是用map,那么键唯一,也就是将上述代码中的multimap被替换为map,这时下面代码所得到的结果就是'a'键对应的值10。

#include <iostream>
#include <map>
int main ()
{
std::map<char,int> my_map;
my_map.insert(std::make_pair('a',));
my_map.insert(std::make_pair('a',));
my_map.insert(std::make_pair('a',));
my_map.insert(std::make_pair('a',));
my_map.insert(std::make_pair('b',));
my_map.insert(std::make_pair('c',));
my_map.insert(std::make_pair('c',));
std::cout << my_map.size() << std::endl;
std::pair<std::map<char,int>::iterator,std::map<char,int>::iterator> ret;
ret=my_map.equal_range('a');
for(std::map<char,int>::iterator it=ret.first;it !=ret.second;it++){
std::cout << it->first << " => " << it->second << '\n';
}
return ;
}

输出:

a => 

STL库中的equal_range()的更多相关文章

  1. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  2. 关于STL库中的max min swap

    嗯...   不得不说c++中的STL库是一个神奇的东西   可以使你的代码显得更加简洁....   今天就只讲STL中的三个鬼畜:   max       min       swap   具体操作 ...

  3. c++ stl库中的set

    简单说来 set(集合)里的元素 不会有相同元素(也就是说 相同的值不存 )并且 存进去会自动排序  类比sort默认排序从小到大 set排序也是 set/multiset会根据待定的排序准则,自动将 ...

  4. STL库中的正态分布函数

    在设计抽奖一类程序中,有时会需要一种概率“有较大可能获得一个普通结果,有较小可能获得一个糟糕或极好的结果”,这就可以用正态分布函数来获得这样一个结果. STL中已经提供了一系列随机分布的函数,包括正态 ...

  5. C++STL 库中set容器应用

    #include<iostream> #include<cstdio> #include<set> using namespace std; set<int& ...

  6. C++STL库中vector容器常用应用

    #include<iostream> #include<vector> #include<algorithm> using namespace std; int m ...

  7. C++STL库中map容器常用应用

    #include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...

  8. STL库中神奇函数nth_element

    用法:nth_element(数组名,数组名+第k小元素,数组名+元素个数) 这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用. 例如: ]={,,,,},k ; cin> ...

  9. STL 库中的陷阱----一个难以察觉的 bug

    请找出下面程序的 bug? int maxProfit2(vector<int> &prices) { int local[3] = {0}; int global[3] = {0 ...

随机推荐

  1. Java虚拟机05.2(内存分配)

    jdk1.7中堆内存分为:年轻代+老年代+永久代.但是永久代有作为非堆内存存在,也就是说堆内存的大小应该为年轻代+老年代.在tomcat容器中,如果jsp页面过多可能出现永久代溢出.通常栈溢出都是程序 ...

  2. Pdo 绑定参数方法 通用更新语句

    public  static  function upShelf($table,$arr,$where)    { //将传入的数组进行key vlaue 分离 并将key值以问号方式绑定参数     ...

  3. mysql批量插入更新操作

    //添加关联赠品(确定) public function addGiveGoods($ids,$child,$parent_sku_no){ $license=new LicenseModel(); ...

  4. Spark学习入门(让人看了想吐的话题)

    这是个老生常谈的话题,大家是不是看到这个文章标题就快吐了,本来想着手写一些有技术深度的东西,但是看到太多童鞋卡在入门的门槛上,所以还是打算总结一下入门经验.这种标题真的真的在哪里都可以看得到,度娘一搜 ...

  5. JuJu团队12月1号工作汇报

    JuJu团队12月1号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达  修改generator函数  优化代码  不熟悉julia 婷婷 和金华一起调试main.jl 继 ...

  6. cf 764A、762A、764B

    颓废题 764A #include<bits/stdc++.h> #define LL long long #define N 100005 #define lowbit(x) x& ...

  7. Java并发读书笔记:线程通信之等待通知机制

    目录 synchronized 与 volatile 等待/通知机制 等待 通知 面试常问的几个问题 sleep方法和wait方法的区别 关于放弃对象监视器 在并发编程中,保证线程同步,从而实现线程之 ...

  8. hashCode equals hashSet

    基于hash的map也是这种机制. HashSet import java.util.HashSet; import java.util.Set; import java.util.TreeSet; ...

  9. 在spark udf中读取hdfs上的文件

    某些场景下,我们在写UDF实现业务逻辑时候,可能需要去读取某个文件. 我们可以将此文件上传个hdfs某个路径下,然后通过hdfs api读取该文件,但是需要注意: UDF中读取文件部分最好放在静态代码 ...

  10. Node.js 文件系统模块

    章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...