C++中map容器的说明和使用技巧
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容器的说明和使用技巧相关推荐
- C++ 中 map 容器的内存释放机制及内存碎片管理
C++ 中 map 容器的内存释放机制及内存碎片管理 C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下 ...
- C/C++语言函数学习(3)STL中map容器
/******************************************************************map的基本操作函数:C++ Maps是一种关联式容器,包含&qu ...
- STL中基本容器有: string、vector、list、deque、set、map
为什么80%的码农都做不了架构师?>>> 在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...
- leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)
文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...
- MFC中STL容器中Vector,List,Map基本用法汇总
容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素.它可以用来存储数据,就比如杯子用来装水一样.而STL中的容器有很多,它包括vector,list,map,deque,set等.我就简单列举 ...
- map容器中删除一个元素(value)
一:问题描述 我们想要删除map容器中,一个key值对应的vlaue 二:上码 #include<iostream> #include<map> #include<vec ...
- C++ 中 map 的用法
C++ 中 map 是一种键值对容器 初始化并赋值 map<string, int> mapAge = {{"张三", 19}, {"李四", 18 ...
- Java中Map用法详解
原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...
- 原 c++中map与unordered_map的区别
c++中map与unordered_map的区别 头文件 map: #include < map > unordered_map: #include < unordered_map ...
最新文章
- Celery 应用:Application
- 卷积神经网络新手指南之二
- Linux下redis安装与使用
- 从编解码算法到全链路RTC架构,揭秘淘系直播技术演进之路
- Linux 下编译、安装、配置 QT
- java 链表逆转_java 实现单链表逆转详解及实例代码
- asp.net的decimal保留两位小数
- 同学,这些事比考证重要的多
- centos lamp
- c语言实现运输问题表上作业法,运输问题表上作业法
- noi2016试题C语言,noip2016普及组初赛试题和答案.pdf
- html怎么设置字体的透明度,CSS字体透明度怎么设置?
- 在macOS上运行bitcoin客户端
- 结巴分词--关键词抽取
- 本科课程【计算机网络】实验2 - 交换机的VLAN配置实验
- SOEM 源码解析 ecx_FRMW
- STM32L4的待机模式闹钟唤醒方法
- gym101532 2017 JUST Programming Contest 4.0
- Etyma01 ced ceed cess
- column-count瀑布流导致元素被截断-解决方法
热门文章
- 禁止用户对系统数据库表的SELECT权限
- 6、SpringBoot+Mybatis整合------参数传递
- system.out.println从什么方向执行
- 守护线程与线程阻塞的四种情况
- UINavigationController 返回到各级目录
- 25行代码实现Promise函数
- Reids实战(7)数据类型五sorted sets
- AfxBeginThread的介绍/基本用法和Window多线程使用详解
- SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析
- 用cxf开发restful风格的WebService