STL库之map映射基础知识

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL库之map映射基础知识相关的知识,希望对你有一定的参考价值。

前言:

映射是指两个集合之间的元素相互对应关系。通俗地说,就是一个元素对应另外一元素。

STL库之map映射基础知识_映射

我们称其中的姓名集合为关键字集合(key),班级集合为值集合(value)

注意一个key不能对应多个value,这一点和函数法则一样!

在C++中我们常用的映射是map


一、构造一个映射

在C++中,我们构造一个map的语句是:map<T1,T2> m;这样我们定义了一个名为m的从T1类型到T2类型的映射。初始的时候m是空映射比如map<string,int> m构造了一个字符串到证书的映射,这样我们可以把一个字符串和一个整数关联起来。


二、插入一个映射(比较特殊)

通过insert()函数向集合中插入一个新的映射,参数是一个pair

首先跟其他数据结构类似,都是需要映射名作为引线,但insert()里面还需要参数!

pair是一个标准库类型,定义在头文件<utility>中

insert()里面的参数是make_pair(,)

STL库之map映射基础知识_映射_02

值得注意:如果插入的key之前已经存在了,将不会用插入的新的value替代原来的value,也就是这次插入是无效的!


三、访问映射

在C++中访问映射和数组一样,直接用【】就能访问。比如a["Tom"]就可以获取Tom的班级。而这里有一个比较神奇的地方,如果没有对“Tom”做过映射的话,此时你访问a["Tom"],系统将会自动为“Tom”生成一个映射,其value为对应类型的默认值(比如int的默认值就是0,string默认值是空字符串)。

并且我们可以之后再给映射赋予新的值,你如a["Tom"]=3,这样为我们提供了另一种方便的插入手段。实际上我们常常通过下标访问的方式插入映射,而不是通过insert插入一个make_pair来实现

STL库之map映射基础知识_数据结构_03


四、判断关键字是否存在

count()函数判断,若存在就返回1,不存在返回0


五、遍历映射

map的迭代器的定义和set差不多,map<T1,T2>::iterator it就定义了一个迭代器,其中T1,T2分别是key和value的类型。c++通过迭代器可以访问集合中的每一个元素。这里的迭代器指向的元素是一个pair,有first和second两个成员变量,分别代表一个映射的key和value

我们用->运算符来获取值。it->first和(*it).first的效果一样,就是获取迭代器it指向的pair里first成员的值

STL库之map映射基础知识_#include_04

#include<string>
#include<map>
#include<utility>
using namespace std;//一定不要忘
int main()

map<string, int> a;
a.insert(make_pair("Tom", 1));
a.insert(make_pair("Zone", 2));
a.insert(make_pair("Mary",1));
a["Tom"] = 4;//可以直接用数组下标的方式进行定义,更为方便
for (map<string,int>::iterator it=a.begin();it!=a.end();it++)

cout << it->first << "->" << it->second << endl;//按照first已经排好序了

return 0;


六、清空函数为clear()

以上是关于STL库之map映射基础知识的主要内容,如果未能解决你的问题,请参考以下文章

我为同学解难题⑬C++程序设计第6期:STL标准库之map容器

数据结构前导课 | 7 更进一步——STL库之List链表

如何在 STL 映射中迭代 STL 映射?

(STL初步)映射:map

STL语法——映射:map 反片语(Ananagrams,UVa 156)

递归 stl 映射