multimap 的使用例子
项目中需要采用一对多的映射关系,原来一直没有用过 multimap,学习了一下,感觉比想象中的容易,一个小例子,演示一下multimap 的使用。
#include <map>
#include <iostream>
using namespace std;
void test_multimap()
{
//构造 multimap 的测试数据
multimap<string, string> example;
example.insert(make_pair(string("A"), string("11")));
example.insert(make_pair(string("A"), string("22")));
example.insert(make_pair(string("A"), string("33")));
example.insert(make_pair(string("B"), string("44")));
example.insert(make_pair(string("B"), string("55")));
example.insert(make_pair(string("B"), string("66")));
example.insert(make_pair(string("C"), string("77")));
example.insert(make_pair(string("C"), string("88")));
example.insert(make_pair(string("C"), string("99")));
example.insert(make_pair(string("D"), string("000")));
example.insert(make_pair(string("D"), string("111")));
example.insert(make_pair(string("D"), string("222")));
example.insert(make_pair(string("F"), string("0000")));
example.insert(make_pair(string("F"), string("1111")));
example.insert(make_pair(string("F"), string("2222")));
example.insert(make_pair(string("F"), string("3333")));
std::string del_item("A");
multimap<string,string>::size_type count = example.erase(del_item);
std::string search_item = "C";
multimap<string, string>::iterator iter = example.find(search_item);
multimap<string, string>::size_type all = example.count(search_item);
//采用指定数量遍历
for(multimap<string, string>::size_type cnt = 0; cnt < all; ++cnt, ++iter)
{
std::cout<<iter->first<<":"<<iter->second<<endl;
}
//采用一个指定范围的迭代器遍历
search_item = "B";
for(iter = example.lower_bound(search_item);iter != example.upper_bound(search_item);++iter)
{
std::cout<<iter->first<<":"<<iter->second<<endl;
}
//使用成对迭代器来遍历元素
search_item = "D";
pair<multimap<string, string>::iterator,multimap<string, string>::iterator> pos;
for(pos = example.equal_range(search_item);pos.first != pos.second;++pos.first)
{
std::cout<<pos.first->first<<":"<<pos.first->second<<endl;
}
//multimap 中删除元素
search_item = "F";
for(iter = example.begin();iter != example.end();)
{
if(iter->second == "0000" || iter->second == "2222")
{
std::cout<<"erase "<<iter->first<<":"<<iter->second<<endl;
example.erase(iter++);
}
else
{
iter++;
}
}
//输出所有元素
for(iter = example.begin();iter != example.end();++iter)
{
std::cout<<iter->first<<":"<<iter->second<<endl;
}
//查看multimap 的帮助文件,没有看到 multimap::operator[] 的定义,所以应该不支持
//这个访问方式,就算支持,也不好定义其返回的值,比如 map 是这样定义的
//Type& operator[](const Key& _Key);multimap 不好定义
}
int main(int argc,char *argv[])
{
test_multimap();
return 0;
}
输出:
C:77
C:88
C:99
B:44
B:55
B:66
D:000
D:111
D:222
erase F:0000
erase F:2222
B:44
B:55
B:66
C:77
C:88
C:99
D:000
D:111
D:222
F:1111
F:3333
multimap 的使用例子相关推荐
- map和multimap 详解
概况 Map和Multimap是将key/value pair 当做元素,进行管理.可以根据key的排序准则自动将元素排序.multimap允许重复元素,map不允许有重复,如图1所示. 图1 Map ...
- 【String类和标准模板库】
1.string类 2.智能指针模板类 3.标准模板库 4.泛型编程 5.函数对象 6.算法 7.其他库 1.string类 string类是由头文件string支持的,要使用类,关键要知道它的公有接 ...
- c++ multimap的几个insert插入元素简单例子
#include <string> #include <iostream> #include <list> #include <vector> #inc ...
- OGRE例子:Demo_Ocean 源码解析
因为最近在做水,所以这篇海洋的例子是必须要读懂的.耐着性子看了一下,还是能看懂的.现在将代码解析放上来.程序共有四个文件:MaterialControls.h :MaterialControls.cp ...
- 【STL源码剖析读书笔记】【第5章】关联式容器之set、map、multiset和multimap
一.set 1. set的特性是所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值. 2. 不能通过set的迭代器改变set的元素,setiterators是一种const ...
- C++ STL 容器的一些总结 --- set(multiset)和map(multimap)
1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...
- STL学习笔记-multimap的基本使用
multimap: 操作函数跟map都一样 区别: 1.允许键值重复: 2.计数 count() 3.find函数返回第一个匹配的元素,没找到返回最后一个 如下例子: 运行截图如下: 源码如下: #i ...
- C++STL笔记(九):map和multimap详解
--一个华科大差生的12年程序员工作总结 相关博文:<Essential C++>笔记之关联容器map的使用总结 相关博文:C++<STL和泛型编程>容器不带/带有成员函数总结 ...
- multimap多重关联容器
介绍: multimap容器与map类似,唯一的不同就是允许重复键 例如:同一个人可能有多少个手机号码,DNS服务器可以将几个URLs映射到相同的IP地址等 multimap中不存在下标运算符 调用头 ...
最新文章
- Linux下MySQL登录报错1045,linux下 root 登录 MySQL 报错的问题
- Hadoop入门实例——WordCount统计单词
- 数据结构Java01【数据结构概述、数组基本使用】
- 每周一题 —— 3n+1问题
- android图片缩小和放大Matrix
- 计算机组成部分有cpu吗,计算机组成原理笔记——处理器(1)[未完]
- drool 7.x 属性 : lock-on-active
- 基于 SOA 的组件化业务基础平台
- Eclipse中打包maven项目-war包方式
- paip.中文 分词 ---paoding 3.1 的使用
- Unity---MainTemplate.gradle配置取消v2签名
- E4A软件设计手环功能模块
- Arithmetic Progression 题解(随机数使用)
- linux启用dcb步骤,Linux内核DCB子系统
- perl应用:SNP的提取(2):从对比序列中找到SNP位点并输出 a.pl
- 如何利用阿里云市场购买并使用短信服务
- Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
- 一个网站广告位的极致使用
- QT 系列博客:为什么要用QT?
- Power BI数据查询编辑