🔥前言
继 set 容器后,今天总结一下 map 容器的功能,从零到一快速掌握基本使用与常用接口。map 在STL 编程中与 vector、list、set 具有同等重要的地位,键值对的方式存储元素在查找时很是高效,那么下面正式开始 map 容器的学习之旅。
1、map 容器基本操作,从构造到查找统计
1.1、map/ multimap 基本概念
特点:
map中所有元素都是二元组pair
二元组中第一个元素为key(键),起到索引作用,第二个元素为value(值)
优点:可以根据key值快速找到value值
所有元素都会根据元素的键值自动升序排序
本质:
map/multimap属于关联式容器,底层结构是用二叉树实现
二者区别:
map不允许容器中有重复key值元素
multimap允许容器中有重复key值元素
1.2、map 赋值和构造
功能:
对map容器进行构造和赋值操作
函数原型:
map<T1, T2> mp; 默认构造函数:
map(const map &mp); 拷贝构造函数
map& operator=(const map &mp); 重载等号操作符
代码示例:
// 遍历容器 void printInfo(map<int,int>& mp) { for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) { cout << "key = " << it->first << " value = " << it->second << endl; } cout << endl; } // 构造和赋值 void test01() { // 默认构造 map<int, int> mp1; // 利用二元组显示创建 mp1.insert(make_pair(1,1)); mp1.insert(make_pair(5,2)); mp1.insert(make_pair(4,5)); printInfo(mp1); // 拷贝构造 map<int, int> mp2(mp1); printInfo(mp2); // 赋值 map<int, int> mp3; mp3 = mp2; printInfo(mp3); }
1.3、map 大小和交换
功能:
统计map容器大小以及交换map容器
函数原型:
size(); 返回容器中元素的数目
empty(); 判断容器是否为空
swap(st); 交换两个集合容器
代码示例:
// 大小和交换 void test02() { // 大小 map<int, int>mp; mp.insert(pair<int, int>(1, 10)); mp.insert(pair<int, int>(3, 30)); mp.insert(pair<int, int>(2, 20)); if (mp.empty()) { cout << "m为空" << endl; } else { cout << "m的大小为: " << mp.size() << endl; } // 交换 map<int, int>m2; m2.insert(pair<int, int>(4, 100)); m2.insert(pair<int, int>(5, 200)); m2.insert(pair<int, int>(6, 300)); cout << "交换前" << endl; printInfo(mp); printInfo(m2); cout << "交换后" << endl; mp.swap(m2); printInfo(mp); printInfo(m2); }