map 详解(C++)
现实中的数据很多是关联的,例如书本名称和价格,每条数据都含有两部分:
信息学竞赛一本通 :¥80
高等数学 :¥27.5
生物信息分析 :¥35.5
我们可以使用map存储这类一对一的数据:
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
另外需要注意的是,使用 map 容器存储的各个键-值对,键的值既不能重复也不能被修改。换句话说,map 容器中存储的各个键值对不仅键的值独一无二,键的类型也会用 const 修饰,这意味着只要键值对被存储到 map 容器中,其键的值将不能再做任何修改。
1.头文件
#include <map>
using namespace std;
2.初始化
std::map<std::string, int>myMap;
std::map<std::string, int>myMap{ {"C语言教程",10},{"STL教程",20} };//myMap 容器在初始状态下,就包含有 2 个键值对。
再次强调,map 容器中存储的键值对,其本质都是 pair 类模板创建的 pair 对象。因此,下面程序也可以创建出一模一样的 myMap 容器:
std::map<std::string, int>myMap{std::make_pair("C语言教程",10),std::make_pair("STL教程",20)};
3.插入元素
C++ STL map 类模板中对[ ]
运算符进行了重载,即根据使用场景的不同,借助[ ]
运算符可以实现不同的操作。举个例子
#include <iostream>
#include <map> //map
#include <string> //string
using namespace std;
int main()
{std::map<string, string> mymap{ {"STL教程","http://c.biancheng.net/java/"} };//获取已存储键值对中,指定键对应的值cout << mymap["STL教程"] << endl;//向 map 容器添加新键值对mymap["Python教程"] = "http://c.biancheng.net/python/";//修改 map 容器已存储键值对中,指定键对应的值mymap["STL教程"] = "http://c.biancheng.net/stl/";for (auto iter = mymap.begin(); iter != mymap.end(); ++iter) {cout << iter->first << " " << iter->second << endl;}return 0;
}
程序执行结果为:
http://c.biancheng.net/java/
Python教程 http://c.biancheng.net/python/
STL教程 http://c.biancheng.net/stl/
可以看到,当操作对象为 map 容器中已存储的键值对时,则借助 [ ] 运算符,既可以获取指定键对应的值,还能对指定键对应的值进行修改;反之,若 map 容器内部没有存储以 [ ] 运算符内指定数据为键的键值对,则使用 [ ] 运算符会向当前 map 容器中添加一个新的键值对。
4.获取元素
map 类模板中对[ ]
运算符进行了重载,这意味着,类似于借助数组下标可以直接访问数组中元素,通过指定的键,我们可以轻松获取 map 容器中该键对应的值。
#include <iostream>
#include <map> // map
#include <string> // string
using namespace std;int main() {//创建并初始化 map 容器std::map<std::string, std::string>myMap{ {"STL教程","http://c.biancheng.net/stl/"},{"C语言教程","http://c.biancheng.net/c/"},{"Java教程","http://c.biancheng.net/java/"} };string cValue = myMap["C语言教程"];cout << cValue << endl;return 0;
}
程序执行结果为:
http://c.biancheng.net/c/
注意,只有当 map 容器中确实存有包含该指定键的键值对,借助重载的 [ ] 运算符才能成功获取该键对应的值;反之,若当前 map 容器中没有包含该指定键的键值对,则此时使用 [ ] 运算符将不再是访问容器中的元素,而变成了向该 map 容器中增添一个键值对。其中,该键值对的键用 [ ] 运算符中指定的键,其对应的值取决于 map 容器规定键值对中值的数据类型,如果是基本数据类型,则值为 0;如果是 string 类型,其值为 "",即空字符串(即使用该类型的默认值作为键值对的值)。
#include <iostream>
#include <map> // map
#include <string> // string
using namespace std;int main() {//创建空 map 容器std::map<std::string, int>myMap;int cValue = myMap["C语言教程"];for (auto i = myMap.begin(); i != myMap.end(); ++i) {cout << i->first << " "<< i->second << endl;}return 0;
}
程序执行结果为:
C语言教程 0
5.迭代元素
#include <iostream>
#include <map> // pair
#include <string> // string
using namespace std;int main() {//创建并初始化 map 容器map<string, string>myMap{ {"STL教程","http://c.biancheng.net/stl/"},{"C语言教程","http://c.biancheng.net/c/"} };//调用 begin()/end() 组合,遍历 map 容器for (map<string, string>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) {cout << iter->first << " " << iter->second << endl;}return 0;
}
程序执行结果为:
C语言教程 http://c.biancheng.net/c/
STL教程 http://c.biancheng.net/stl/
6.删除元素
删除键为bfff指向的元素cmap.erase("bfff");删除迭代器 key所指向的元素
map<string,int>::iterator key = cmap.find("mykey");
if(key!=cmap.end())
{cmap.erase(key);
}删除所有元素
cmap.erase(cmap.begin(),cmap.end());
map 详解(C++)相关推荐
- php小程序地图处理,微信小程序 地图map详解及简单实例
微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...
- java map详解
java map详解 Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类 ...
- sync.Map详解
导航 Golang sync.Map 详解 简单的介绍一下 Golang Map Map 使用 sync.Map sync.Map 是什么 sync.Map 使用 sync.Map 剖析 sync.m ...
- .map文件 源映射(Source Map)详解
一.什么是源映射 为了提高性能,很多站点都会先压缩 JavaScript 代码然后上线, 但如果代码运行时出现错误,浏览器只会显示在已压缩的代码中的位置,很难确定真正的源码错误位置. 这时源映射就登场 ...
- java中list和map详解
java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...
- java中set和ge什么么意思,java的Collection和Map详解
java的Collection和Map详解 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文 ...
- 目标检测指标mAP详解
前言 相信刚刚接触目标检测的小伙伴也是有点疑惑吧,目标检测的知识点和模型属实有点多,想要工作找CV的话,目标检测是必须掌握的方向了.我记得在找实习的时候,面试官就问到了我目标检测的指标是什么,答:mA ...
- jquery源码解析:each,makeArray,merge,grep,map详解
jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... each: function( ...
- [转] java的 Collection 和 Map 详解
原文转自: http://www.diybl.com/course/3_program/java/javajs/2007917/71621.html 前言 线性表,链表,哈希表是常用的数 ...
- python lambda ,map详解
lambda 匿名函数 1 # 普通定义函数 2 def func1(x,y): 3 return x+y 4 # 执行函数 5 print(func(1,2)) 6 # 如果此函数只调用一次,或者功 ...
最新文章
- JavaScript简单重写构造器的原型
- linux使网卡点亮_Linux下 无线网卡配置无线唤醒功能的方法
- python有趣小程序-Python全栈开发-有趣的小程序
- Swagger Annotation 详解(建议收藏)
- 关闭windows端口的批处理命令
- 怎么将pdf转Word中英文转换器在线转换
- 求职面试技巧_开始求职的7个技巧
- Namecheap 给域名添加ssl证书
- 典型IO模型----阻塞IO,非阻塞IO,信号驱动IO,异步IO
- 人工智能的发展方向与机遇
- 汉语言文学与茶2019EI会议论文的融合探析
- 扫地机器人漫谈(三):扫地机的传感器
- 原来游戏技术行业最大的秘密竟然是...
- 整数与浮点数比较-汇编码分析
- Python和numpy下载安装方法
- java ema算法_全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数
- 主机托管的优势,为什么要选择主机托管
- HTML生日快乐代码 (粉色主题)(HTML5+CSS3+JS)520表白代码/七夕情人节网页/告白/求婚/生日快乐...
- H3C路由器配置命令.doc
- Godot Engine:用Shader实现旗帜飘飘的效果