選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主頁 C++ 簡介 C++ 入門 C++ 語法 C++ 輸出 C++ 註釋 C++ 變數 C++ 使用者輸入 C++ 資料型別 C++ 運算子 C++ 字串 C++ 數學 C++ 布林值 C++ If...Else C++ Switch C++ While 迴圈 C++ For 迴圈 C++ Break/Continue C++ 陣列 C++ 結構體 C++ 列舉 C++ 引用 C++ 指標

C++ 函式

C++ 函式 C++ 函式引數 C++ 函式過載 C++ 作用域 C++ 遞迴

C++ 類

C++ OOP C++ 類/物件 C++ 類方法 C++ 建構函式 C++ 訪問修飾符 C++ 封裝 C++ 繼承 C++ 多型 C++ 檔案 C++ 異常 C++ 日期

C++ 資料結構

C++ 資料結構與 STL C++ Vectors C++ List C++ Stacks C++ Queues C++ Deque C++ Sets C++ Maps C++ 迭代器 C++ 演算法

C++ How To

C++ 兩數相加 C++ 隨機數

C++ 參考

C++ 參考 C++ 關鍵字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 示例

C++ 示例 C++ 現實生活中的例子 C++ 編譯器 C++ 練習 C++ 測驗 C++ 證書


C++ Map


C++ Map

Map 儲存“鍵/值”對的元素。

Map 中的元素

  • 可以透過鍵(而不是索引)訪問,每個鍵都是唯一的。
  • 按鍵的升序自動排序。

要使用 Map,您必須包含 <map> 標頭檔案

// 包含 map 庫
#include <map>

建立 Map

要建立 Map,請使用 map 關鍵字,並在尖括號 <> 中指定鍵和值的**型別**。最後,指定 Map 的名稱,例如:map<keytype, valuetype> mapName

示例

// 建立一個名為 people 的 Map,它將儲存字串作為鍵,整數作為值
map<string, int> people

如果您想在宣告時就新增元素,請將它們放在花括號 {} 中,用逗號分隔的列表中

示例

// 建立一個 Map 來儲存不同人的姓名和年齡
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

訪問 Map

您無法像訪問 陣列向量那樣,透過索引號來訪問 Map 元素。

相反,您可以透過方括號 [] 中的鍵來訪問 Map 元素

示例

// 建立一個 Map 來儲存不同人的姓名和年齡
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 獲取與鍵“John”關聯的值
cout << "John is: " << people["John"] << "\n";

// 獲取與鍵“Adele”關聯的值
cout << "Adele is: " << people["Adele"] << "\n";
自己動手試一試 »

您還可以使用 .at() 函式訪問元素

示例

// 建立一個 Map 來儲存不同人的姓名和年齡
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

 // 獲取與鍵“Adele”關聯的值
cout << "Adele is: " << people.at("Adele") << "\n";

// 獲取與鍵“Bo”關聯的值
cout << "Bo is: " << people.at("Bo") << "\n";
自己動手試一試 »

注意:.at() 函式通常比方括號 [] 更受歡迎,因為它會在元素不存在時丟擲錯誤訊息

示例

// 建立一個 Map 來儲存不同人的姓名和年齡
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 嘗試訪問一個不存在的元素(將丟擲異常)
cout << people.at("Jenny");
自己動手試一試 »


更改值

您還可以更改與鍵關聯的值

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 將 John 的值從 32 更改為 50
people["John"] = 50;

cout << "John is: " << people["John"];  // 現在輸出 John is: 50
自己動手試一試 »

但是,使用 .at() 函式更安全

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 將 John 的值從 32 更改為 50
people.at("John") = 50;

cout << "John is: " << people.at("John");  // 現在輸出 John is: 50
自己動手試一試 »

新增元素

要向 Map 新增元素,使用方括號 [] 是可以的

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 新增新元素
people["Jenny"] = 22;
people["Liam"] = 24;
people["Kasper"] = 20;
people["Anja"] = 30;
自己動手試一試 »

但您也可以使用 .insert() 函式

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 新增新元素
people.insert({"Jenny", 22});
people.insert({"Liam", 24});
people.insert({"Kasper", 20});
people.insert({"Anja", 30});
自己動手試一試 »

具有相同鍵的元素

Map 不能包含鍵相同的元素。

例如,如果我們嘗試將“Jenny”新增到 Map 兩次,它只會保留第一個

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 嘗試新增兩個鍵相同的元素
people.insert({"Jenny", 22});
people.insert({"Jenny", 30});
自己動手試一試 »

總結:值可以相同,但鍵必須唯一。


移除元素

要從 Map 中移除特定元素,可以使用 .erase() 函式

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 按鍵移除元素
people.erase("John");
自己動手試一試 »

要移除 Set 中的所有元素,可以使用 .clear() 函式

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 移除所有元素
people.clear();

獲取 Map 的大小

要找出 Map 包含多少個元素,請使用 .size() 函式

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.size();  // 輸出 3
自己動手試一試 »

檢查 Map 是否為空

使用 .empty() 函式來檢視 Map 是否為空。

.empty() 函式在 Map 為空時返回 1true),否則返回 0false

示例

map<string, int> people;
cout << people.empty(); // 輸出 1 (Map 為空)
自己動手試一試 »

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.empty();  // 輸出 0 (不為空)
自己動手試一試 »

注意:您還可以透過使用 .count(key) 函式來檢查特定元素是否存在。

如果元素存在,它返回 1true),否則返回 0false

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.count("John");  // 輸出 1 (John 存在)
自己動手試一試 »

遍歷 Map

您可以使用 **for-each** 迴圈遍歷 Map。但是,有幾點需要注意

  • 您應該在 for 迴圈中使用 auto 關鍵字(在 C++11 版本中引入)。這允許編譯器自動確定每個鍵值對的正確資料型別。
  • 由於 Map 元素包含鍵和值,您必須在迴圈中使用 .first 來訪問鍵,並使用 .second 來訪問值。
  • Map 中的元素按鍵的升序自動排序

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

for (auto person : people) {
  cout << person.first << " is: " << person.second << "\n";
}

輸出將是:

Adele is: 45
Bo is: 29
John is: 32
自己動手試一試 »

如果您想反轉順序,可以在尖括號中使用 greater<type> 仿函式,如下所示

示例

map<string, int, greater<string>> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

for (auto person : people) {
  cout << person.first << " is: " << person.second << "\n";
}

輸出將是:

John is: 32
Bo is: 29
Adele is: 45
自己動手試一試 »

提示:也可以使用 迭代器遍歷 Map,這將在下一章中詳細介紹。



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援