【C++教學】map 自動排序的鍵值對映射 說明與用法範例

map 是一個鍵值對容器,鍵唯一且自動排序,基於紅黑樹實現。適合需要快速查找鍵值對的場景。

特性

  • 鍵值對儲存,鍵唯一且自動排序。
  • 查詢、插入、刪除效率為 O(log n)。
  • 支援透過鍵快速查找值。

成員函數介紹

  • insert:插入鍵值對(自動排序,忽略重複)。
  • erase:移除指定鍵、迭代器或範圍的元素。
  • size:返回元素的數量。
  • find:搜尋指定鍵,返回指向鍵值對的迭代器(iterator),如果找不到則返回 end()
  • count:返回指定鍵的出現次數(結果為 0 或 1,因為鍵不會重複)。
  • empty:返回容器是否為空。
  • clear:移除所有鍵值對,清空容器。
  • begin:返回指向第一個元素的迭代器。
  • end:返回指向集合末尾的迭代器。
  • rbegin:返回指向最後一個元素的反向迭代器。
  • rend:返回指向反向起點的迭代器。

用法範例

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // 建立映射
    map<string, int> scores; // 宣告映射時預設為按鍵由小排到大
    // map<string, int, greater<string>> scores; // 宣告映射時改為按鍵由大排到小

    // 新增鍵值對
    scores["小明"] = 85;
    scores["小華"] = 90;
    scores["小美"] = 95;

    // 透過鍵存取值
    int score = scores["小明"]; // score=85

    // 遍歷映射
    cout << "所有分數:";
    for (const auto& pair : scores) {
        cout << pair.first << ": " << pair.second << " ";
    }
    cout << endl;
    
    // 尋找指定元素
    if (scores.find("小華") != scores.end()) 
    {
        // 元素存在
    }
    else
    {
        // 元素不存在
    }

    // 刪除鍵值對
    scores.erase("小華");
    
    return 0;
}

適用場景

  • 需要透過鍵快速查找值時。
  • 需要保持鍵的排序時。

類似容器

其他類似的功能可以參考以下STL容器:

  • unordered_map
  • multimap

返回頂端