C++ map核心用法:从入门到精通
·
一、上期回顾
掌握 set/multiset:底层红黑树、自动排序、元素唯一 / 可重复、只能迭代器遍历。今天学 map/multimap,真正工程开发用得最多的键值对容器。
二、map 核心概念
- map:存储
key-value键值对 - 底层依旧红黑树
- key 唯一、自动按 key 升序排序
- key 不可重复,value 可以重复
- 增删查效率 O(logn)
三、map 与 multimap 区别
- map:key 唯一,不允许重复键
- multimap:允许重复 key,同一个键可以对应多个 value
日常开发 99% 只用 map。
四、map 常用构造初始化
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
// 1. 空map
map<int, string> m1;
// 2. 直接初始化键值对
map<int, string> m2 = {
{1, "张三"},
{2, "李四"},
{3, "王五"}
};
// 3. 拷贝构造
map<int, string> m3(m2);
return 0;
}
五、map 插入数据四种方式
map<int, string> m;
// 方式1:[] 下标插入/修改
m[1] = "张三";
m[2] = "李四";
// 方式2:insert 插入pair
m.insert(pair<int, string>(3, "王五"));
// 方式3:insert 直接大括号
m.insert({4, "赵六"});
// 方式4:value_type
m.insert(map<int, string>::value_type(5, "孙七"));
注意:
m[key]如果 key 不存在,自动插入默认值- insert 遇到重复 key 不会覆盖
六、map 遍历方式
map<int, string> m = {{1,"A"},{2,"B"},{3,"C"}};
// 1. 迭代器遍历
for(map<int, string>::iterator it = m.begin(); it != m.end(); ++it)
{
// it->first 键,it->second 值
cout << it->first << " " << it->second << endl;
}
// 2. C++11 范围for
for(auto& p : m)
{
cout << p.first << " " << p.second << endl;
}
七、map 常用核心接口
map<int, string> m;
// 大小、判空
m.size();
m.empty();
// 查找key
auto it = m.find(2);
if(it != m.end())
{
cout << it->second << endl;
}
// 删除
m.erase(it); // 按迭代器删
m.erase(3); // 按键删除
// 清空
m.clear();
八、multimap 简单了解
允许同一个 key 保存多个 value,不支持 [] 下标访问
multimap<int, string> mm;
mm.insert({1, "语文"});
mm.insert({1, "数学"});
mm.insert({2, "英语"});
适合一个键对应多条记录的场景。
九、完整综合示例代码
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> stu;
// 插入数据
stu[1001] = "张三";
stu[1002] = "李四";
stu.insert({1003, "王五"});
// 遍历
cout << "map遍历结果:" << endl;
for(auto& p : stu)
{
cout << "学号:" << p.first
<< " 姓名:" << p.second << endl;
}
// 查找
auto it = stu.find(1002);
if(it != stu.end())
{
cout << "查到学生:" << it->second << endl;
// 删除
stu.erase(it);
}
cout << "删除后遍历:" << endl;
for(auto& p : stu)
{
cout << p.first << " " << p.second << endl;
}
return 0;
}
十、今日核心总结
- map 底层红黑树,键值对存储、key 自动升序
- map key 唯一;multimap 允许 key 重复
- 四种插入方式,[] 会自动补默认值,insert 不覆盖
- 遍历用迭代器 / 范围 for,
first取键,second取值 - 常用接口:find /erase/size /clear
- 项目开发配置、映射关系首选 map
十一、课后练习
- 用 map 存 3 个学号 + 姓名
- 查找指定学号,存在则删除
- 遍历输出所有键值对
更多推荐

所有评论(0)