C++ multimap的用法
定义
类似于map,multimap也是存储两个元素之间的映射关系的容器,不相同的是,multimap的key值可以重复出现。另外和map、set一样,multimap的关键字类型也要具有严格弱序的定义。(补:通常不对关联容器使用泛型算法--<<C++ Primer>>)
初始化
创建空的容器:
std::multimap<char, int> first;
从一个范围构造:
std::multimap<char, int> second(first.begin(), first.end());
复制构造:
std::multimap<char, int> third(second);
添加自定义比较:
struct classcomp {bool operator() (const char& lhs, const char& rhs) const{return lhs<rhs;} };std::multimap<char,int,classcomp> fourth;
添加元素
添加元素使用成员函数insert
,有以下几种添加元素的形式:
std::multimap<char, int> mymultimap
版本一:添加单个元素
mymultimap.insert(std::pair<char, int>('a', 100)); mymultimap.insert({'b', 20}); //insert()返回指向当前新插入元素的迭代器 it = mymultimap.insert(std::pair<char, int>('c', 60));
版本二:从一个范围添加
std::multimap<char, int> hismultimap; hismultimap.insert(mymultimap.begin(), mymultimap.find('c'));
版本三:在提示的(Hint)位置添加:
mymultimap.insert(it, std::pair<char, int>('d', 10));
访问操作
遍历:
mymultimap.insert (std::pair<char,int>('a',10)); mymultimap.insert (std::pair<char,int>('b',20)); mymultimap.insert (std::pair<char,int>('b',150));for(std::mymultimap<char, int>::iterator it = mymultimap.begin(); it != mymultimap.end(); ++it)std::cout << (*it).first << "=>" << (*it).second << "\n"// output: // a=>10 // b=>20; // b=>150;
查找:
方法一:利用成员函数
find
和count
std::multimap<char, int> mymm; mymm.insert (std::make_pair('x',10)); mymm.insert (std::make_pair('y',20)); mymm.insert (std::make_pair('z',30)); mymm.insert (std::make_pair('z',40));auto nums = mymm.count('z'); //'z'的数量 auto iter = mymm.find('z'); //第一个'z' while(nums--){cout << iter->second << endl;iter++; }
方法二:利用成员函数
lower_bound
和upper_bound
这两个函数都接受一个查找关键字,返回一个迭代器
lower_bound
返回的迭代器指向第一个具有给定关键字的元素,upper_bound
返回的迭代器指向最后一个匹配给定关键字的元素之后的位置。如果查找元素不存在,两个函数返回的迭代器相等--指向一个不影响排序的关键字插入位置。for(auto beg = mymm.lower_bound('z'), end = mymm.upper_bound('z'); beg != end; ++beg)cout << beg->second << endl;
方法三:使用成员函数
equal_range
euqal_range
接受一个查找关键字,返回一个迭代器pair
。若关键字存在,则第一个迭代器指向第一个与关键字匹配的元素,第二个迭代器指向最后一个匹配元素之后的位置。若未找到匹配元素,则两个迭代器都指向关键字可以插入的位置。for(auto pos = mymm.equal_range('z'); pos.first != pos.second; ++pos.first)cout << pos.first->second << endl;
删除元素
使用erase
删除multimap中的元素,erase
有三种形式:
删除指定键值:
mymm.erase('a')
,返回删除的元素数量传入一个迭代器:
it = mymm.find('a'); mymm.erase(it);
传入两个迭代器,删除一定范围元素
mymm.erase(it, mymm.end());
转载于:https://www.cnblogs.com/patrolli/p/11281736.html
C++ multimap的用法相关推荐
- map和multimap的用法详解
一.map的文档总结 1.map是关联式容器,它按照key值比较存储,默认是小于: 2.在map中,键值key通常用于唯一的标识元素,而值value中存储与此键值key关联的内容:键值key和valu ...
- STL —— multimap的用法详解
文章目录 multimap的基本性质 STL--multimap容器的用法 multimap容器的创建与初始化 multimap容器包含的成员方法 multimap容器大小 multimap容器中键值 ...
- Google Guava 库用法整理
http://macrochen.iteye.com/blog/737058 参考: http://codemunchies.com/2009/10/beautiful-code-with-googl ...
- map,multimap,unordered_map,unordered_multimap的详解
1,map简介 map是STL的一个关联容器,它提供一对一的hash. 第一个可以称为关键字(key),每个关键字只能在map中出现一次: 第二个可能称为该关键字的值(value): map以模板(泛 ...
- map和multimap
文章目录 1 map和multimap简介 2 map和multimap常用用法 2.1 map/multimap对象的默认构造 2.2 map和multimap对象的带参数构造 2.3 map的插入 ...
- C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
本小节主要讲set的使用方法. 关联容器将值和键关联在一起,并使用键来查找值. 关联容器的优点在于:它提供了对元素的快速访问.插入元素的时候,不需要指定插入位置,因为关联容器是排过序的,它知道新元素来 ...
- 【STL学习指南】STL的入门学习指南
目录 STL 学习指南 一. STL基础 二. C++ STL 容器 1 序列式容器 1.1 array 1.2 vector 1.3 deque 1.4 list 2 关联式容器 2.1 map 2 ...
- C++STL标准库学习总结/索引/学习建议
前言: 如果刚刚开始学习STL标准库,不知道从哪里入手学习的话,建议去中国大学mooc平台,先学习北京大学郭炜老师的<程序设计与算法(一)C语言程序设计>(https://www.icou ...
- [STL]六大组件介绍(目录 全)
一般介绍 STL(Standard TemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中, ...
最新文章
- 四次面试:程序员越来越悲催了
- Ext Tree异步树的增加修改删除的简单实现~
- PyTorch的损失函数和优化器
- Java 分割字符串的方法String.split()底层原理
- 安卓开源项目周报1220
- mysql proxy 管理_ProxyMySQL的Admin管理接口
- PYTHON__关于Socket中的Select使用理解
- 没错,你离分布式搜索只差一个Elasticsearch入门!
- 2013年蓝桥杯软件大赛预赛java本科b组答案_2013年蓝桥杯软件大赛预赛C本科B组试题...
- 从fragment启动另一个fragment
- 对话诸葛 io 孔淼:数据分析如何做,才能圈住用户?
- NYOJ74 - 小学生算术
- C++ coredump原因总结(转载)
- AndroidStudio测试用例合集(一)
- Quicksql部署
- Lorenzo Von Matterhorn(暴力)(树)
- 洛谷P1046陶陶摘苹果题解--zhengjun
- 上了一堂健身课,27岁程序员尿尿像酱油!
- ios 全屏返回手势
- 计算单目标跟踪器的平均CLE
热门文章
- [翻译]Axure-Dynamic Panel(Basic)-原型设计工具Axure学习-第2.1节
- web移动端Fixed在Input获取焦点时ios下产生的BUG及处理
- 揭开JVM所看到的try/catch/finally
- 构建之法读书笔记之五
- C语言做一个通讯录程序(在console里面运行)
- 微信开放平台 公众号第三方平台开发 教程一 平台介绍
- php 降低图像大小,尝试在php中调整图像大小时如何处理此内存泄漏?
- log4j 源码解析_log4j1.x设置自动加载log4j.xml
- 结构体为什么要4字节对齐
- linux命令行 正则,在Linux命令行中使用正则表达式