< 返回新闻公共列表
<C++>map 容器快速上手|自定义数据类型排序的避坑理解(上)
发布时间:2023-06-28 10:00:36
前言
继 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 mp; 默认构造函数:
map(const map &mp); 拷贝构造函数
map& operator=(const map &mp); 重载等号操作符
代码示例:
// 遍历容器 void printInfo(map& mp) { for (map::iterator it = mp.begin(); it != mp.end(); it++) { cout << "key = " << it->first << " value = " << it->second << endl; } cout << endl; } // 构造和赋值 void test01() { // 默认构造 map mp1; // 利用二元组显示创建 mp1.insert(make_pair(1,1)); mp1.insert(make_pair(5,2)); mp1.insert(make_pair(4,5)); printInfo(mp1); // 拷贝构造 map mp2(mp1); printInfo(mp2); // 赋值 map mp3; mp3 = mp2; printInfo(mp3); }
1.3、map 大小和交换
功能:
统计map容器大小以及交换map容器
函数原型:
size(); 返回容器中元素的数目
empty(); 判断容器是否为空
swap(st); 交换两个集合容器
代码示例:
// 大小和交换 void test02() { // 大小 mapmp; mp.insert(pair(1, 10)); mp.insert(pair(3, 30)); mp.insert(pair(2, 20)); if (mp.empty()) { cout << "m为空" << endl; } else { cout << "m的大小为: " << mp.size() << endl; } // 交换 mapm2; m2.insert(pair(4, 100)); m2.insert(pair(5, 200)); m2.insert(pair(6, 300)); cout << "交换前" << endl; printInfo(mp); printInfo(m2); cout << "交换后" << endl; mp.swap(m2); printInfo(mp); printInfo(m2); }