C++学习之map(一)

C++学习之map(一)



前言

大学要毕业了发现单纯的C语言好像不太够用,对python和C#等语言应用也不是特别熟练,为了更好的适应研究生学习生活开始学习C++。
由于本人本科期间为了比赛修习过一段时间C++,此处直接从map开始进行解析学习。


提示:以下是本篇文章正文内容,下面案例可供参考

一、map是什么?

map的效果如其名,地图作用,亦是映射效果,给一个事物取名,将1称为a,我们可以用a来指代1,感觉是一个灵活版本的#define。例子:数组a[i]的元素a[i]与其下标i的关系。

二、map的函数

map<type1, type2>mapname
type为数据类型
mapname为容器名称
type1—type2
key—value
要素与值的关系

1.map的初始化

map1.insert(pair<int, int>(i,a[i]));//用insert函數插入pair		
map2.insert(map<int, int>::value_type(i,a[i]));//用insert函数插入value_type数据
map3[i]=a[i];//直接赋值

此处的key与value存在对应关系,初步实验后发现当映射成立后一个key的value无法直接更改,但可以擦除后再写入,也可以创造新的key来对应重复的value。

2.map的find()函数

auto posi=map.find(key)
posi是迭代器,已知有两个成员
posi->first//是key
posi->second//是value

代码如下(示例):

//find函数:查找元素位置
cout << "map1:" << endl; 
cout <<"位置->元素"<< endl; //所处位置
for (int i = 0; i < (len); i++)
{
	auto posi1 = map1.find(i);
	cout << posi1->first <<"->" << posi1->second << endl; //所处位置
}

3.map的擦除函数

方法1:迭代器范围刪除

	//用迭代器范围刪除
	auto posi4 = map2.find(9);
	map2.erase(map2.begin(), posi4);
	map2.insert(map<int, int>::value_type(2, 2));//用insert函数插入value_type数据
	cout << "剩余元素:" << endl;
	len = map2.size();
	for (int i = 0; i < 10; i++)
	{
		cout << map2[i] << endl;//该位置的值
	}
	cout << "输出结束" << endl;

此处存在一个问题,无法全部删除,如果使用map2.erase(map2.begin(), posi4);
map2的size为10,key=9是最后一个组,但输出显示最后一组并未被删除。
如果使用map2.erase(map2.begin(), map2.end());
则可以将全部的组删除。输出为0。
顺带提一句,删除后依旧可以输出,但是输出的值为0,输出的类型未验证,留给网友解决吧。

方法2:定点刪除

	cout << "删除实验:"<< endl;
	posi2 = map1.find(9);//迭代器寻找数字
	cout << posi2->second << endl; //所处位置从0开始起数
	map1.erase(posi2->first);
	cout <<"剩余元素:" << endl;
	len= map1.size();
	for (int i = 0; i < len; i++)
	{
		cout << map1[i] << endl;//该位置的值
	}
	cout << "输出结束" << endl;

这个也有意思,len的计算不管删除什么值,长度确实是删除后的长度,但是被删除的地方依旧可以输出为0.

方法3:全部刪除

map1.clear()

总结

暂时用到的函数就这么多,后面刷题碰到新的继续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值