项目中需要采用一对多的映射关系,原来一直没有用过 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 的使用例子相关推荐

  1. map和multimap 详解

    概况 Map和Multimap是将key/value pair 当做元素,进行管理.可以根据key的排序准则自动将元素排序.multimap允许重复元素,map不允许有重复,如图1所示. 图1 Map ...

  2. 【String类和标准模板库】

    1.string类 2.智能指针模板类 3.标准模板库 4.泛型编程 5.函数对象 6.算法 7.其他库 1.string类 string类是由头文件string支持的,要使用类,关键要知道它的公有接 ...

  3. c++ multimap的几个insert插入元素简单例子

    #include <string> #include <iostream> #include <list> #include <vector> #inc ...

  4. OGRE例子:Demo_Ocean 源码解析

    因为最近在做水,所以这篇海洋的例子是必须要读懂的.耐着性子看了一下,还是能看懂的.现在将代码解析放上来.程序共有四个文件:MaterialControls.h :MaterialControls.cp ...

  5. 【STL源码剖析读书笔记】【第5章】关联式容器之set、map、multiset和multimap

    一.set 1.  set的特性是所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值. 2.  不能通过set的迭代器改变set的元素,setiterators是一种const ...

  6. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)

    1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...

  7. STL学习笔记-multimap的基本使用

    multimap: 操作函数跟map都一样 区别: 1.允许键值重复: 2.计数 count() 3.find函数返回第一个匹配的元素,没找到返回最后一个 如下例子: 运行截图如下: 源码如下: #i ...

  8. C++STL笔记(九):map和multimap详解

    --一个华科大差生的12年程序员工作总结 相关博文:<Essential C++>笔记之关联容器map的使用总结 相关博文:C++<STL和泛型编程>容器不带/带有成员函数总结 ...

  9. multimap多重关联容器

    介绍: multimap容器与map类似,唯一的不同就是允许重复键 例如:同一个人可能有多少个手机号码,DNS服务器可以将几个URLs映射到相同的IP地址等 multimap中不存在下标运算符 调用头 ...

最新文章

  1. Linux下MySQL登录报错1045,linux下 root 登录 MySQL 报错的问题
  2. Hadoop入门实例——WordCount统计单词
  3. 数据结构Java01【数据结构概述、数组基本使用】
  4. 每周一题 —— 3n+1问题
  5. android图片缩小和放大Matrix
  6. 计算机组成部分有cpu吗,计算机组成原理笔记——处理器(1)[未完]
  7. drool 7.x 属性 : lock-on-active
  8. 基于 SOA 的组件化业务基础平台
  9. Eclipse中打包maven项目-war包方式
  10. paip.中文 分词 ---paoding 3.1 的使用
  11. Unity---MainTemplate.gradle配置取消v2签名
  12. E4A软件设计手环功能模块
  13. Arithmetic Progression 题解(随机数使用)
  14. linux启用dcb步骤,Linux内核DCB子系统
  15. perl应用:SNP的提取(2):从对比序列中找到SNP位点并输出 a.pl
  16. 如何利用阿里云市场购买并使用短信服务
  17. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
  18. 一个网站广告位的极致使用
  19. QT 系列博客:为什么要用QT?
  20. Power BI数据查询编辑

热门文章

  1. strlen()函数详解
  2. LeetCode刷题之575.分糖果
  3. js输入关键词生成标签代码
  4. Spark基础编程实践
  5. fuel8 生成bootstrap映像
  6. 守护者创客~ 一个真正可以放手一搏的项目
  7. odb 使用指南(一)环境搭建
  8. PHPMyWind编辑器支持Word导入
  9. 放大器的传递函数_谁惧怕电容负载变化?斩波放大器吗?
  10. function and functionality