news 2026/5/7 17:11:53

C++ map核心用法:从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ map核心用法:从入门到精通

一、上期回顾

掌握 set/multiset:底层红黑树、自动排序、元素唯一 / 可重复、只能迭代器遍历。今天学map/multimap,真正工程开发用得最多的键值对容器。


二、map 核心概念

  1. map:存储key-value键值对
  2. 底层依旧红黑树
  3. key 唯一、自动按 key 升序排序
  4. key 不可重复,value 可以重复
  5. 增删查效率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; }

十、今日核心总结

  1. map 底层红黑树,键值对存储、key 自动升序
  2. map key 唯一;multimap 允许 key 重复
  3. 四种插入方式,[] 会自动补默认值,insert 不覆盖
  4. 遍历用迭代器 / 范围 for,first取键,second取值
  5. 常用接口:find /erase/size /clear
  6. 项目开发配置、映射关系首选 map

十一、课后练习

  1. 用 map 存 3 个学号 + 姓名
  2. 查找指定学号,存在则删除
  3. 遍历输出所有键值对
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 17:09:09

基于MCP协议构建多模态AI工具集:从原理到实战部署

1. 项目概述&#xff1a;一个多模态AI的“万能遥控器” 如果你正在构建一个AI应用&#xff0c;并且厌倦了为每一个新功能——比如生成一张图、搜索一段资料、或者把文字变成语音——都去单独对接一套API、写一堆胶水代码&#xff0c;那么这个项目可能就是你在找的“瑞士军刀”…

作者头像 李华
网站建设 2026/5/7 17:07:56

串口助手完整指南:跨平台串口调试工具使用详解

串口助手完整指南&#xff1a;跨平台串口调试工具使用详解 【免费下载链接】SerialPortAssistant This project is a cross-platform serial port assistant. It can run on WINDOWS, linux、android、macos system. 项目地址: https://gitcode.com/gh_mirrors/se/SerialPor…

作者头像 李华
网站建设 2026/5/7 17:07:03

ThingsBoard MQTT数据上报进阶:如何设计高效的遥测数据JSON结构?

ThingsBoard MQTT数据上报进阶&#xff1a;高效遥测数据JSON结构设计实战 在物联网项目开发中&#xff0c;数据上报的效率直接影响系统整体性能。当设备数量达到数百甚至上千&#xff0c;每个设备又包含多个传感器时&#xff0c;如何设计合理的JSON数据结构就成为了架构设计的…

作者头像 李华
网站建设 2026/5/7 17:06:49

拯救中文电子书:Calibre路径翻译问题的终极解决方案

拯救中文电子书&#xff1a;Calibre路径翻译问题的终极解决方案 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文&#xff08;中文&#xff09;命名 项目地址: htt…

作者头像 李华
网站建设 2026/5/7 17:05:13

终极指南:如何用MAA智能辅助工具解放你的明日方舟游戏时间

终极指南&#xff1a;如何用MAA智能辅助工具解放你的明日方舟游戏时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https:/…

作者头像 李华