STL库中的equal_range()
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()的更多相关文章
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- 关于STL库中的max min swap
嗯... 不得不说c++中的STL库是一个神奇的东西 可以使你的代码显得更加简洁.... 今天就只讲STL中的三个鬼畜: max min swap 具体操作 ...
- c++ stl库中的set
简单说来 set(集合)里的元素 不会有相同元素(也就是说 相同的值不存 )并且 存进去会自动排序 类比sort默认排序从小到大 set排序也是 set/multiset会根据待定的排序准则,自动将 ...
- STL库中的正态分布函数
在设计抽奖一类程序中,有时会需要一种概率“有较大可能获得一个普通结果,有较小可能获得一个糟糕或极好的结果”,这就可以用正态分布函数来获得这样一个结果. STL中已经提供了一系列随机分布的函数,包括正态 ...
- C++STL 库中set容器应用
#include<iostream> #include<cstdio> #include<set> using namespace std; set<int& ...
- C++STL库中vector容器常用应用
#include<iostream> #include<vector> #include<algorithm> using namespace std; int m ...
- C++STL库中map容器常用应用
#include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...
- STL库中神奇函数nth_element
用法:nth_element(数组名,数组名+第k小元素,数组名+元素个数) 这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用. 例如: ]={,,,,},k ; cin> ...
- STL 库中的陷阱----一个难以察觉的 bug
请找出下面程序的 bug? int maxProfit2(vector<int> &prices) { int local[3] = {0}; int global[3] = {0 ...
随机推荐
- Java虚拟机05.2(内存分配)
jdk1.7中堆内存分为:年轻代+老年代+永久代.但是永久代有作为非堆内存存在,也就是说堆内存的大小应该为年轻代+老年代.在tomcat容器中,如果jsp页面过多可能出现永久代溢出.通常栈溢出都是程序 ...
- Pdo 绑定参数方法 通用更新语句
public static function upShelf($table,$arr,$where) { //将传入的数组进行key vlaue 分离 并将key值以问号方式绑定参数 ...
- mysql批量插入更新操作
//添加关联赠品(确定) public function addGiveGoods($ids,$child,$parent_sku_no){ $license=new LicenseModel(); ...
- Spark学习入门(让人看了想吐的话题)
这是个老生常谈的话题,大家是不是看到这个文章标题就快吐了,本来想着手写一些有技术深度的东西,但是看到太多童鞋卡在入门的门槛上,所以还是打算总结一下入门经验.这种标题真的真的在哪里都可以看得到,度娘一搜 ...
- JuJu团队12月1号工作汇报
JuJu团队12月1号工作汇报 JuJu Scrum 团队成员 今日工作 剩余任务 困难 于达 修改generator函数 优化代码 不熟悉julia 婷婷 和金华一起调试main.jl 继 ...
- cf 764A、762A、764B
颓废题 764A #include<bits/stdc++.h> #define LL long long #define N 100005 #define lowbit(x) x& ...
- Java并发读书笔记:线程通信之等待通知机制
目录 synchronized 与 volatile 等待/通知机制 等待 通知 面试常问的几个问题 sleep方法和wait方法的区别 关于放弃对象监视器 在并发编程中,保证线程同步,从而实现线程之 ...
- hashCode equals hashSet
基于hash的map也是这种机制. HashSet import java.util.HashSet; import java.util.Set; import java.util.TreeSet; ...
- 在spark udf中读取hdfs上的文件
某些场景下,我们在写UDF实现业务逻辑时候,可能需要去读取某个文件. 我们可以将此文件上传个hdfs某个路径下,然后通过hdfs api读取该文件,但是需要注意: UDF中读取文件部分最好放在静态代码 ...
- Node.js 文件系统模块
章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...