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();
总结
暂时用到的函数就这么多,后面刷题碰到新的继续更新。