这篇开始学习C++中的Map容器,也叫字典,字典中的元素是键值对形式存在的。在学习map容器之前,我们先学习C++中的一个对组的小知识点。然后学习map容器的构造和赋值相关API。
1.对组
概念:成对出现的数据,利用对组可以返回两个数据。这个特点有点类似python中的元组。
对组的两种创建方式
下面写简单的练习代码,练习对组的两种创建方式,和如何获取对组中两组数据的方法。
#include <iostream>
#include <string>
using namespace std;
void test01()
{
// 对组创建方式1,有点像默认无参构造
pair<string, int> p("Anthony", 23);
// 对组创建方法2
pair<string, int> p2 = make_pair("Tom", 18);
// 如何访问对组中值
cout << "Name: " << p.first << " Age: " << p.second << endl;
cout << "Name: " << p2.first << " Age: " << p2.second << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果
2.map的构造和赋值
上面有了对组的理解,然后从对组概念过度到字典容器中键值对。
概念:
- map中所有的元素都是pair
- pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
- 所有元素都会根据元素的键值自动排序
本质
map/multimap属于关联式容器,底层结构是用二叉树实现。
优点:
可以根据Key值快速找到value值
map和multimap的区别
- map不允许容器中有重复的key值元素
- multimap允许容器中有重复的key值元素
下面看看Map容器的构造相关API
构造和赋值相关函数原型
一个默认构造和拷贝构造,形式和前面其他容器一样。
#include <iostream>
#include <string>
#include <map>
using namespace std;
void printMap(map<string, int>& m)
{
for(map<string, int> ::iterator it = m.begin(); it != m.end(); it++)
{
cout << "Key= " << (*it).first << " ,Value= " << (*it).second << endl;
}
}
void test01()
{
// map容器的构造
map<string, int> m;
// map容器添加元素
m.insert(pair<string, int>("Tom", 18));
m.insert(pair<string, int>("Anthony", 23));
m.insert(pair<string, int>("Bob", 24));
m.insert(pair<string, int>("Sunny", 19));
printMap(m);
// map容器赋值操作
cout << "========================" << endl;
map<string, int> m2 = m;
printMap(m);
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果
上面学习了:
- 如何遍历map容器
- map容器的插入操作,插入函数的参数是一个对组
- map的构造和赋值操作