map笔记

map


映射是指两个集合之间的元素的相互对应关系。通俗来讲,就是一个元素对应另一个元素。比如我们的名字和班级之间可以有映射关系
我们称其中的姓名集合为关键词集合(key),班级集合为值集合(value).
在c++中我们常用的映射为map
引用库
在c++中map的实现在一个 头文件,在代码开头引入这个头文件,并且加上一句using namespace std;

#include <map>
using namespace std;

构造一个映射
在c++中,我们构造一个map的语句为:map<T1,T2>m;。这样我们定义了一个名为m的从T1类型到T2类型的映射。初始的时候m是空映射
插入一对映射
在c++中通过insert()函数向集合中插入一个新的映射,参数是一个pair
pair是一个标准库类型,定义在头文件utility中,可以看成有两个成员变量first和second的结构体,并且重载了<运算符(先比较first大小,如果一样再比较second).当我们创建一个pair时,必须提供两个类型
我们可以向这样定义一个保护string和int的pair

pair<string,int>p;

make_pair(v1,v2)函数返回由v1和v2初始化的pair,类型可以从v1和v2的类型推断出来。
我们向映射中加入新映射对的时候就是通过插入pair来实现的。如果插入的key之前已经存在了,将不会用插入的新的value替代原来的value,也就是这次插入是无效的

#include <map>
#include <string>
#include <utility>
using namespace std;
int main()
{
	map<string, int>dict;//dict是一个string到int的映射,存放每个名字对应的班级号,初始化为零
	dict.insert(make_pair("tom", 1));//{“tom”->1}
	dict.insert(make_pair("jane", 2));//{"tom"->1,“jane”->2}
	return 0;
}

访问映射
在c++中访问映射和数组一样,直接用【】就能访问。比如dict【“tom”】就可以获取“tom“的班级了。而这里有一个比较神奇的地方。如果没有对”tom“做出映射的话,此时你访问dict【“tom”】,系统会自动为“tom”生成一个映射,其value为对应类型的默认值(比如int的默认值是0,string的默认值是空字符串)
并且我们可以之后再给映射赋予新的值,比如dict【“tom”】=3

#include <iostream>
#include <map>
#include<string>
using namespace std;
int main()
{
	map<string, int>dict;
	dict["tom"] = 1;//tom->1
	dict["jane"] = 2;//jane->2
	cout << "tom is in class" << dict["tom"] << endl;
	cout << "jane is in class" << dict["jane"] << endl;
	return 0;

}

判断关键字是否存在
在c++中,使用count()函数,如果关键词存在,返回1,否则会返回0.
遍历映射

#include <iostream>
#include <map>
#include<string>
using namespace std;
int main()
{
	map<string, int>dict;
	dict["tom"] = 1;//tom->1
	dict["jane"] = 2;//jane->2
	for (map<string, int>::iterator it = dict.begin(); it != dict.end(); it++)
	{
		cout << it->first << "->" << it->second << endl;
	}
	return 0;
}

注意,在c++中遍历map是按照关键词从小到大遍历的,这一点和set有些共性
清空
c++中只需要clear()函数就可清除map和其占用的内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值