C++ STL: Map

  1. 1. 簡介
  2. 2. 標頭檔
  3. 3. 宣告
  4. 4. 常用操作
  5. 5. 插入元素
  6. 6. 範例

映射

簡介

又稱關聯陣列,按照特定順序存儲由鍵值(key)和映射值(value)組合而成的元素,可以想成 key 值允許用其他型態的陣列。

標頭檔

1
#include <map>

宣告

1
map<type1, type2> mp;

type1, type2 可為 int, char, string…,mp可為任意名字。

常用操作

函數 描述
insert() 插入指定元素
erase() 刪除指定元素
clear() 刪除所有元素
count() 回傳元素是否存在
find() 回傳指向該元素的迭代器
empty() 回傳是否為空
size() 回傳有幾個元素

插入元素

分為兩種方法,一種是以陣列方式直接插入,若該 key 值已經存在,則 value 會更新成新的數值。

C++
1
2
3
4
mp["kirito"] = 10;
mp["asuna"] = 16;
mp["rem"] = 520;
mp["kirito"] = 48763; //kirito對應的value更新成48763

另一種則是使用 insert() 函數,把 key 值和 value 值包裝成一個 pair 的形式插入。和陣列插入不一樣的是,若該 key 值已經存在,則不插入,回傳一個指向該元素的迭代器。

C++
1
2
3
4
mp.insert(pair<string, int>("kirito", 10));
mp.insert(pair<string, int>("asuna", 16));
mp.insert(pair<string, int>("rem", 520));
mp.insert(pair<string, int>("kirito", 48763)); //沒效果

範例

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <map>
using namespace std;

int main(){
map<string, int> mp;
mp["克萊茵"] = 10;
mp["asuna"] = 16;
mp.insert(pair<string, int>("rem", 520));
mp.insert(pair<string, int>("桐谷和人", 48763));
cout << "目前元素個數為 " << mp.size() << "\n";
cout << "此元素的value為 " << mp.find("克萊茵")->second << "\n"; //回傳指向該元素的迭代器,並將其指向value
mp.erase("克萊茵"); //刪除指定元素
cout << "此元素的value為 " << mp.find("克萊茵")->second << "\n"; //此元素已被刪除,指向之value為亂數
for(auto it = mp.begin(); it != mp.end(); ++it){ //使用迭代器遍歷,默認排序為字典序
cout << it -> first << " " << it -> second << "\n";
}
mp.clear(); //刪除所有元素
cout << "是否為空 " << mp.empty() << "\n";

return 0;
}
輸出

目前元素個數為 4
此元素的value為 10
此元素的value為 17377760
asuna 16
rem 520
桐谷和人 48763
是否為空 1

參考資料:cplusplus.com