1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. //Multimap 案例:
  8. //1个key值可以对应多个valude =分组
  9. //公司有销售部 sale (员工2名)、技术研发部 development (1人)、财务部 Financial (2人)
  10. //人员信息有:姓名,年龄,电话、工资等组成
  11. //通过 multimap进行 信息的插入、保存、显示
  12. //分部门显示员工信息
  13.  
  14. class Person
  15. {
  16. public:
  17. string name;
  18. int age;
  19. string tel;
  20. double saly;
  21. };
  22.  
  23. void multimapInit()
  24. {
  25. Person p1, p2, p3, p4, p5;
  26.  
  27. p1.name = "王1";
  28. p1.age = 31;
  29.  
  30. p2.name = "王2";
  31. p2.age = 32;
  32.  
  33. p3.name = "张3";
  34. p3.age = 33;
  35.  
  36. p4.name = "张4";
  37. p4.age = 34;
  38.  
  39. p5.name = "赵5";
  40. p5.age = 35;
  41.  
  42. multimap<string, Person> map2;
  43. //sale部门
  44. map2.insert(make_pair("sale", p1));
  45. map2.insert(make_pair("sale", p2));
  46.  
  47. //development 部门
  48. map2.insert(make_pair("development", p3));
  49. map2.insert(make_pair("development", p4));
  50.  
  51. //Financial 部门
  52. map2.insert(make_pair("Financial", p5));
  53.  
  54. for (multimap<string, Person>::iterator it = map2.begin(); it != map2.end(); it++)
  55. {
  56. cout << it->first << "\t" << it->second.name << endl;
  57. }
  58. cout << "遍历结束" << endl;
  59.  
  60. //
  61. int num2 = map2.count("development");
  62. cout << "development部门人数==>" << num2 << endl;
  63.  
  64. cout << "development部门员工信息" << endl;
  65. multimap<string, Person>::iterator it2 = map2.find("development");
  66.  
  67. int tag = 0;
  68. while (it2 != map2.end() && tag < num2)
  69. {
  70. cout << it2->first << "\t" << it2->second.name << endl;
  71. it2++;
  72. tag++;
  73. }
  74.  
  75. }
  76.  
  77. //age = 32修改成 name32
  78. void multimapChange()
  79. {
  80. Person p1, p2, p3, p4, p5;
  81.  
  82. p1.name = "王1";
  83. p1.age = 31;
  84.  
  85. p2.name = "王2";
  86. p2.age = 32;
  87.  
  88. p3.name = "张3";
  89. p3.age = 33;
  90.  
  91. p4.name = "张4";
  92. p4.age = 34;
  93.  
  94. p5.name = "赵5";
  95. p5.age = 35;
  96.  
  97. multimap<string, Person> map2;
  98. //sale部门
  99. map2.insert(make_pair("sale", p1));
  100. map2.insert(make_pair("sale", p2));
  101.  
  102. //development 部门
  103. map2.insert(make_pair("development", p3));
  104. map2.insert(make_pair("development", p4));
  105.  
  106. //Financial 部门
  107. map2.insert(make_pair("Financial", p5));
  108.  
  109. cout << "\n按照条件 检索数据 进行修改 " << endl;
  110. for (multimap<string, Person>::iterator it = map2.begin(); it != map2.end(); it++)
  111. {
  112. //cout << it->first << "\t" << it->second.name << endl;
  113. if (it->second.age == 32)
  114. {
  115. it->second.name = "name32";
  116. }
  117. }
  118.  
  119. for (multimap<string, Person>::iterator it = map2.begin(); it != map2.end(); it++)
  120. {
  121. cout << it->first << "\t" << it->second.name << endl;
  122. }
  123.  
  124. }
  125.  
  126. int main()
  127. {
  128. multimapInit();
  129. multimapChange();
  130.  
  131. return 0;
  132. }

STL - miltimap(可重映射)的更多相关文章

  1. STM32重映射(PinRemap)的使用,注意!

    STM32重映射,内容和细节稍后补充,这里只说几个注意点,花了我一晚上的时间调试终于找到问题所在了... 芯片: STM32f107vct6 晶振: 25M 通过分频器与锁相环,使系统时钟为72M 背 ...

  2. STM32F0系列MCU中断向量表的重映射

    最近使用了一款Cortex-M0内核的芯片STM32F030CC,发现它中断向量表的重映射方法与STM32F10x系列的有所区别,在这里记录与分享一下. 由于需要通过IAP进行固件升级,所以芯片的FL ...

  3. STM32管教复用与重映射关系

    摘自:http://blog.csdn.net/lincheng15/article/details/51789093 概括一下:复用就是一个引脚有几个功能,1.做普通IO输入输出 2.其他外设的输入 ...

  4. STM32 UART 重映射

    在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内 ...

  5. STM32 TIM重映射

    复用功能 没有重映射 部分重映射 完全重映射 TIM3_CH1 PA6 PB4 PC6 CH2 PA7 PB5 PC7 CH3 PB0 PB0 PC8 CH4 PB1 PB1 PC9 /**重映射 t ...

  6. OpenCV探索之路(八):重映射与仿射变换

    重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...

  7. 单片机中printf函数的重映射

    单片机中printf函数的重映射 一.源自于:大侠有话说 1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能 除了打印你想要的字符到屏幕上外,还能把数字进行格式化 ...

  8. usart2 重映射

    今天拾起闲置很久的灰机,测试发现nrf2401坏掉,重新淘宝.还发现机上搭载的usart1坏掉,换成usart2,发现端口被电机占用,重映射到PD5,PD6 关键是后面两句不要忘记了 RCC_APB1 ...

  9. sharpkeys键盘按键重映射

    /********************************************************************** * sharpkeys键盘按键重映射 * 说明: * 键 ...

  10. OpenCV——重映射、仿射变换

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

随机推荐

  1. linux TCP数据包封装在SKB的过程分析

    在linux中 tcp的数据包的封装是在函数tcp_sendmsg开始的,在函数tcp_sendmsg中用到skb = sk_stream_alloc_skb(sk, select_size(sk, ...

  2. 解决 oracle IO占用率很高的问题

    突然user io占用率很很高,看了一个AWR报告,发现direct path read temp,direct path write temp的的数率很高,后来怀疑是临时表空间不够了,就试着设了一下 ...

  3. Swift基础之UIPickerView和小animate的使用

    写一个简单的UIPickerView的使用Demo,比较简单,其中和一个小动画的结合使用 UIPickerView的使用基本上跟OC语言中的一样,就是写法的样式问题,想必开发过OC的应该不需要多讲了, ...

  4. Android的5层平台架构

    Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建.下图所示为 Android 平台的主要组件. Android 软件栈 Linux 内核 Android 平台的基础 ...

  5. 23 服务的绑定启动Demo3

    MainActivity.java package com.example.day23_service_demo3; import com.example.day23_service_demo3.My ...

  6. Android系统开机启动流程及init进程浅析

    Android系统启动概述 Android系统开机流程基于Linux系统,总体可分为三个阶段: Boot Loader引导程序启动Linux内核启动Android系统启动,Launcher/app启动 ...

  7. iOS下JS与原生OC互相调用(总结)

    这是去年总结的一篇文章,也一并先放到这个目录下好了. iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇 方 ...

  8. Eclipse 主题

    Eclipse开发环境默认都是白底黑字的,看到同事的Xcode中设置的黑灰色背景挺好看的,就去网络上查了一下.发现Eclipse也可以设置主题. http://eclipsecolorthemes.o ...

  9. 03_NoSQL数据库之Redis数据库:list类型

     lists类型及操作 List是一个链表结构,主要功能室push,pop.获取一个范围的所有值等等,操作中key理解为链表的名字.Redis的list类型其实就是一个每个元素都是string类型 ...

  10. JavaScript实现的网页放大镜效果

    今天在观看视频学习的时候,学到了一个小技巧.就拿过来与大家进行分享一下啦. 实现的原理 分析需求:需要两张图,一大一小.然后根据鼠标的动作显示出不同的区域块的图像. 核心:鼠标事件的获取和处理.图片显 ...