C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。

1   头文件

  #include   <map> 

2   定义

map<string,   int>   my_Map; 或者是
typedef     map<string,   int>   MY_MAP;
MY_MAP   my_Map; 

3   插入数据

  (1)   my_Map["a"]   =   1; (2)   my_Map.insert(map<string,   int>::value_type("b",2)); (3)   my_Map.insert(pair<string,int>("c",3)); (4)   my_Map.insert(make_pair<string,int>("d",4)); 

4   查找数据和修改数据

  (1)   int   i   =   my_Map["a"]; my_Map["a"]   =   i; (2)   MY_MAP::iterator   my_Itr; my_Itr.find("b"); int   j   =   my_Itr->second; my_Itr->second   =   j; 

不过注意,键本身是不能被修改的,除非删除。

5   删除数据

  (1)   my_Map.erase(my_Itr); (2)   my_Map.erase("c"); 

还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。

6   迭代数据

  for   (my_Itr=my_Map.begin();   my_Itr!=my_Map.end();   ++my_Itr)   {} 

7   其它方法

  my_Map.size()               返回元素数目 my_Map.empty()       判断是否为空 my_Map.clear()           清空所有元素 

可以直接进行赋值和比较:=,   >,   >=,   <,   <=,   !=   等等

8  map的举例

要求: 将mymap中itemstruct   的a大于100的项删除

struct   itemstruct { int   a; char   b[20]; }; map<string,   itemstruct   >     mymap. 
解答1:#include   <iostream> #include   <ctime> #include   <map> using   namespace   std; typedef   struct   itemstruct { int   a; char   b[20]; }itemS; itemS   s[4]   =   {{102,"what"}, {33,   "hello"}, {198,"world"}, {45,   "c++"} };; int     main() { map<string,   itemS>     mymap; string   str[4]   =   {"1st","2nd","3rd","4th"}; for(int   i   =   0;   i<4;   i++) { mymap.insert(make_pair(str[i],   s[i])); } map<string,itemS>::iterator   it; for(it=mymap.begin();   it!=mymap.end(); it++) { if(it->second.a >100){ i=mymap.erase(it);  ----->正确mymap.erase(it);     ----->it失效..}}//first是Key, second是value;for(it = mymap.begin();  it!=mymap.end(); it++) { cout<<it->first<<"   "<<it->second.a<<"   "<<it->second.b<<endl; } system("pause"); return   0; }
解答2:
#include<map> #include<iterator> #include<string> #include<iostream> #include<cstring> using   namespace   std; struct   itemstruct { int   a; char   b[20]; itemstruct(int   t,char*str) { a=t; strcpy(b,str); } }; int   main() { map<string,itemstruct>mymap; mymap.insert(make_pair("a",itemstruct(10,"hanzhou"))); mymap.insert(make_pair("ab",itemstruct(20,"fuzhou"))); mymap.insert(make_pair("abc",itemstruct(30,"zhengzhou"))); mymap.insert(make_pair("abcd",itemstruct(200,"wuhan"))); mymap.insert(make_pair("abcde",itemstruct(150,"kunming"))); mymap.insert(make_pair("abcdef",itemstruct(50,"xiamen"))); map<string,itemstruct>::iterator   it=mymap.begin(); while(it!=mymap.end()) { if((it->second).a>100)mymap.erase(it++); else   it++; } it=mymap.begin(); while(it!=mymap.end()) { cout<<it->first<<"   "<<(it->second).a<<"   "<<(it->second).b<<endl; it++; } system("PAUSE"); return   0; }
解答3:for(map<string,   itemstruct>::iterator   i   =   mymap.begin();   i   !=   mymap.end();) { if(i->second.a   >   100) i   =   mymap.erase(i); else ++i; } 

C++中map容器的说明和使用技巧相关推荐

  1. C++ 中 map 容器的内存释放机制及内存碎片管理

    C++ 中 map 容器的内存释放机制及内存碎片管理 C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下 ...

  2. C/C++语言函数学习(3)STL中map容器

    /******************************************************************map的基本操作函数:C++ Maps是一种关联式容器,包含&qu ...

  3. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  4. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

    文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...

  5. MFC中STL容器中Vector,List,Map基本用法汇总

    容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素.它可以用来存储数据,就比如杯子用来装水一样.而STL中的容器有很多,它包括vector,list,map,deque,set等.我就简单列举 ...

  6. map容器中删除一个元素(value)

    一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...

  7. C++ 中 map 的用法

    C++ 中 map 是一种键值对容器 初始化并赋值 map<string, int> mapAge = {{"张三", 19}, {"李四", 18 ...

  8. Java中Map用法详解

    原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...

  9. 原 c++中map与unordered_map的区别

    c++中map与unordered_map的区别 头文件 map: #include < map > unordered_map: #include < unordered_map ...

最新文章

  1. Celery 应用:Application
  2. 卷积神经网络新手指南之二
  3. Linux下redis安装与使用
  4. 从编解码算法到全链路RTC架构,揭秘淘系直播技术演进之路
  5. Linux 下编译、安装、配置 QT
  6. java 链表逆转_java 实现单链表逆转详解及实例代码
  7. asp.net的decimal保留两位小数
  8. 同学,这些事比考证重要的多
  9. centos lamp
  10. c语言实现运输问题表上作业法,运输问题表上作业法
  11. noi2016试题C语言,noip2016普及组初赛试题和答案.pdf
  12. html怎么设置字体的透明度,CSS字体透明度怎么设置?
  13. 在macOS上运行bitcoin客户端
  14. 结巴分词--关键词抽取
  15. 本科课程【计算机网络】实验2 - 交换机的VLAN配置实验
  16. SOEM 源码解析 ecx_FRMW
  17. STM32L4的待机模式闹钟唤醒方法
  18. gym101532 2017 JUST Programming Contest 4.0
  19. Etyma01 ced ceed cess
  20. column-count瀑布流导致元素被截断-解决方法

热门文章

  1. 禁止用户对系统数据库表的SELECT权限
  2. 6、SpringBoot+Mybatis整合------参数传递
  3. system.out.println从什么方向执行
  4. 守护线程与线程阻塞的四种情况
  5. UINavigationController 返回到各级目录
  6. 25行代码实现Promise函数
  7. Reids实战(7)数据类型五sorted sets
  8. AfxBeginThread的介绍/基本用法和Window多线程使用详解
  9. SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析
  10. 用cxf开发restful风格的WebService