
一、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; }