拓冰建站拓冰建站
首页 / 资讯中心 / 正文

C++学习笔记---容器---map映射

一、map 核心基础特性必考成对存储以key键 value值成对存储一一映射关系Key唯一不重复键不能重复自动有序默认根据key从小到大升序排序与value无关底层结构平衡二叉搜索树红黑树和 set 完全一致支持下标访问区别于 setmap 可以直接通过mp[key]读写数据二、头文件与标准定义语法1. 必备头文件#include map、#include iostream字符串操作需额外#include string2. 定义格式map键类型, 值类型 容器名; map键类型, 值类型 容器名{{key1,value1}.{key2,value2}}; //不对key排序 unordered_map键类型, 值类型 容器名;3. 常用定义示例mapint, int m1; // 整型键 → 整型值 mapchar, int m2; // 字符键 → 整型值统计字符次数专用 mapstring, int m3; // 字符串键 → 整型值统计单词次数 mapint, string m4; // 整型键 → 字符串值编号对应名称三、map 插入与修改数据两种写法1. 下标法初学首选、最常用既能插入新数据也能覆盖修改旧数据语法简单直观。mapint, string mp; mp[1] C语言; mp[2] C; mp[1] 新版C语言; // key重复直接覆盖旧value2. insert 插入法特点key重复时不覆盖、不生效保留原值。mp.insert({3, Python});核心规则总结key不存在两种方式均为新增键值对key已存在下标法覆盖值insert法无效不修改四、map 两种遍历方式考试必考map中每个元素是键值对.first访问 key键.second访问 value值1. 范围for强化循环重点考点for(auto p : mp){ cout 键 p.first 值 p.second endl; }2. 迭代器遍历//正向 for(auto it mp.begin(); it ! mp.end(); it){ cout it-first it-second endl; } ​//反向 for(auto it mp.rbegin(); it ! mp.rend(); it){ cout it-first it-second endl; }五、map 全套核心成员函数mp.size()获取键值对总个数 mp.empty()判断容器是否为空空返回true mp.clear()清空所有键值对 mp.erase(key)删除指定key的整组键值对 mp.find(key)按key查找元素返回迭代器find() 查找规则和set完全一致查找成功返回当前key的迭代器可取值查找失败返回mp.end()auto it mp.find(2); if(it ! mp.end()){ cout 找到 it-second; }else{ cout 不存在该键; }六、map 超级易错重难点下标访问自动创建数据陷阱使用mp[不存在的key]时不会报错会自动插入该keyvalue默认初始化为0/空。mapint, int mp; cout mp[10]; // 自动新增 key10, value0解决方案单纯判断key是否存在优先使用find()不要用下标判断七、map 初学高频易错点汇总map 排序只看key和value没有任何关系。key唯一下标法插入会覆盖原值insert法插入会保留原值忽略新值。set不能用[]下标map支持[]下标访问是最大区别。下标访问不存在的key会自动新增键值对统计场景极易出错。map遍历必须使用.first、.second取值不能直接输出元素。find函数仅根据key查找无法通过value查找数据。map有序、unordered_map无序做题需根据是否需要排序选择容器。#include iostream #include map #include string using namespace std; int main(){ mapint, string mp; // 1. 下标插入 覆盖修改 mp[2] C; mp[1] Python; mp[3] Java; mp[1] Python新版; // 2. 范围for遍历自动按key升序 cout map有序遍历结果 endl; for(auto p : mp) { cout key: p.first value: p.second endl; } // 3. find查找测试 auto it mp.find(2); if(it ! mp.end()){ cout \n查找成功 it-first it-second endl; }else{ cout \n查找失败 endl; } // 4. 删除元素 mp.erase(3); cout \n删除key3后剩余元素个数 mp.size() endl; return 0; }
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门