map的嵌套使用方法

4 篇文章 0 订阅

map的嵌套使用方法

vector可以理解为一种映射关系,给定指定的int值,都会返回与其对应的特定类型的值。

类比vector,map也可以理解一种映射关系,只不过比起vector更加灵活,给定值不再局限于int型,可以任意指定。

因此,从这个角度来理解map,对于算法题的使用可以十分灵活。对应的高维的map(嵌套map)也比较容易理解了。

定义一个嵌套的map;

map<int,map<int,int> >m1;
map<string,map<string,int> >m2;

此map的key值为int型,而value值则为map对象。

赋值操作:

m1[1][2] = 5;
m2["s1"]["t1"] = 7;
m2["s1"]["t5"] = 9;
m2["s3"]["t2"] = 5;
m2["s5"]["t7"] = 44;

遍历操作:

for(map<string,map<string,int> >::iterator it1 = m2.begin();it1!=m2.end();it1++)
{
	cout<<it1->first<<endl;		
	for(map<string,int>::iterator it2 = it1->second.begin();it2 != it1->second.end();it2++)
		cout<<it2->first<<" "<<it2->second<<endl; 
}

输出结果:
在这里插入图片描述

在遍历的过程中,要注意几个点

  1. 第一行,两个右箭头中间要留有空格,不然会被当作是流操作而报错。
  2. it1是迭代器,简单理解可以当作指针,因此对其内部的值的访问只能用**"->“而不能用”."。而取到的value值即it1->second是一个map对象,因此对其操作只能用".“而不能用”->"**。故访问内部map的迭代器须写成:
map<string,int>::iterator it2 = it1->second.begin()

类似的,find()操作如下:

map<string,map<string,int> >::iterator ii;
ii = m2.find("s1");
if(ii!=m2.end())
{
	cout<<ii->first<<endl;
	map<string,int>::iterator ii2;
	ii2 = ii->second.find("t5");
	if(ii2!=ii->second.end())
		cout<<ii2->first<<" "<<ii2->second<<endl;
}

其中,用到了两次find操作,find函数的返回值是一个迭代器,若查找失败,将返回end(),因此可以适当的进行find()操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值