映射表map


# 映射表

在c++中,我们构造一个map的方法为

map<T1,T2> m;

构造了一个名为m的从T1类型,到T2类型的映射

T1和T2可以是char,int,string……

初始的时候m是一个空映射,通过写

map<int,string> m;

构造了一个字符串到一个整数的映射,将字符串和整数关联起来.

插入方法:

在c++中通过insert在映射表中插入一组新的映射,参数是一个pair。

pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,头文件是。

make_pair(v1,v2);

函数返回由v1和v2初始化的pair。

如果之前插入的key不存在了,那么将无法插入新的value替代原来的value。

#include<utility>
#include<iostream>
#include<map>
using namespace std;
int main(){
	map<string,int> m;
	m.insert(make_pair("Emliy",1));
  	//{"Emliy"->1}
	m.insert(make_pair("Tony",2));
 	//{"Emliy"->1}{"Tony"->2}
	m.insert(make_pair("Angela",2));
        //{"Emliy"->1}{"Tony"->2}{"Angela"->2}
	m.insert(make_pair("Tony",1));
        //{"Emliy"->1}{"Tony"->2}{"Angela"->2}
	return 0;
}

访问方法:

在C++中,访问映射和访问数组的方法及其相似,都是直接用[ ]就可以访问,比如通过m[“Emliy”]就可以访问"Emliy"对应的值了。

有个比较神奇的地方是:当你访问一个你没有做过映射的值,会自动生成一个映射,为默认值(int的默认值是0,string的默认值是一个空字符串)。

判断是否存在

用count()查找关键字是否被映射过,映射过返回1,没映射过返回0。

#include<iostream>
#include<cstring>
#include<map>
using namespace std;
int main(){
   map<string,int> m;
   m["Tony"]=1;
 	m["Amy"]=2;
  	m["Jonny"]=1;
  	if(m.count("Tony"))
  		cout<<"Tony is in class"<<m["Tony"]<<endl;
  	else
  		cout<<"Tony is not in class"<<endl;
  	return 0;
}

输出结果

Tony is in class 2

遍历映射

map的迭代器和set差不多,map<T1,T2> :: iterator it,就定义了一个新的迭代器。

有first和second两个成员变量,分别代表映射的key和value。

用->运算符来取值,it->first和(*it).first用途相同。

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

输出结果

Amy->2

Jonny->1

Tony->1

注意:是按照关键字顺序遍历的,这点和set很相似

清除元素

用clear()函数,即可清除map和map所占的内存。

map总结(大多数)

insert 插入一对映射 O(logn)

count 判断关键字是否存在 O(logn)

size 获取映射对个数 O(1)

clear 清空 O(n)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值