一、map容器的四种插入方法:
创建map对象:
map<int, int> m1;
pair对组的认识:
如果对pair对组不太了解,可以先看看这位博主对pair对组的相关介绍
第一种:
//通过使用pair对组构造函数 并使用匿名函数对将pair对组的数据赋给map对象
//系统会自动回收匿名对象 当匿名对象没有进行绑定操作,会自动进行析构。
//在此之前会将其数据赋给m1
m1.insert(pair<int, int>(1, 4));
第二种:
//使用paird对组的另一种构造函数 使用make_pair会进行自动识别输入数据的类型
m1.insert(make_pair(3, 0));
第三种:
//map作用域下的 value _类型() 少用,但可以用来装
m1.insert(map<int, int>::value_type(2, 7));
第四种:
//[ ]方式 注意:此种方式 索引不是数组下标 而是key值 即 [key值]
m1[4] = 5;
进行输出的操作:
//当然你也可以使用普通的迭代器 不需要加const_ 直接在::后面加上iterator
void printMap(const map<int, int>& m)//通过引用方式读取 来节约空间
{
for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
{
cout << "key值= " << it->first << " value值= " <<it->second<< endl;
}
cout << endl;
}
// 为什么使用const_iterator 防止通过迭代器更改数据
// 请看以下案例
// for (deque<int>::const_iterator it = d.begin(); it < d.end(); it++)
// 为了不改变输出的数据 使用 const
// {
// *it = 100; //无法再更改数据
// cout << *it << " ";
// }
// cout<<endl;
四种输出结果:
第四种的注意事项:
1.若打印输出一个未定义的key,会输出0,并会创建此key,并赋予其value值为0
未定义key 5 但仍会返回 0 创建一个key 为 5,value 为 0 的值
cout << "m1[5]的值为:"<<m1[5] << endl;
2.用[ ]方式会可以替换旧值.非常方便
//更改key下的value值
m1[4] = 100;
其运行结果:
二、完整代码:
#include<iostream>
using namespace std;
#include<map>
void printMap(const map<int, int>& m)
{
for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
{
cout << "key值= " << it->first << " value值= " <<it->second<< endl;
}
cout << endl;
}
void test01()
{
map<int, int> m1;
//插入
//第一种:
m1.insert(pair<int, int>(1, 4));
//第二种:
m1.insert(make_pair(3, 0));//pair 的 独特 初始化
//第三种:
m1.insert(map<int, int>::value_type(2, 7));//map作用域下的值 类型() 更适合装逼
//第四种:
m1[4] = 5;//注意:此种方式 索引不是数组下标 而是key值
printMap(m1);
cout << "m1[5]的值为:"<<m1[5] << endl;//未给key 5 赋值 但仍会返回 0 创建一个key 为 5,value 为 0 的值
printMap(m1);
//更改key下的value值
m1[4] = 100;
cout << "更改key为4下的value值为100" << endl;
printMap(m1);
}
int main()
{
test01();
system("pause");
return 0;
}
三、运行结果:
四、总结:
[ ]方式的好处:insert的方式不会替换旧值.用[ ]方式才会替换旧值.非常方便。
用第四种方式 打印输出若你key值填错,也会创建一个value为0的值,并进行返回。
你可能会想:那可以用 if(m1[i] =0) {m1.erase(i);} 进行将填错的删除(如erase(4),则删除key为4的数据)
确实可以,但得注意原本数据中的value值中是否就有0。