算法競賽STL:map的使用方法
map
容器描述: map
是一種關聯容器,它存儲的元素是鍵值對,鍵和值可以是任意類型。map
內部的元素按照鍵的順序進行排序,排序的規則由比較函數決定。
使用方法: 首先,你需要包含頭文件#include <map>
,然后聲明一個map
對象,如std::map<int, std::string> m;
。這將創建一個鍵為整數、值為字符串的map
。
底層實現: map
的底層通常實現為紅黑樹。紅黑樹是一種自平衡的二叉查找樹,它可以在對數時間內完成查找、插入和刪除操作。
支持操作:
操作名 | 效果 | 傳入參數 | 操作返回值 |
---|---|---|---|
insert(const pair<const Key, T>& value) | 插入一個鍵值對 | value: 要插入的鍵值對 | 返回一個pair,第一個元素是指向新插入元素的迭代器,第二個元素是一個bool值,如果插入成功,返回true;否則,返回false |
erase(iterator pos) | 刪除指定位置的元素 | pos: 要刪除元素的位置 | 返回被刪除元素之后元素的迭代器 |
erase(const Key& key) | 刪除鍵為給定值的元素 | key: 要刪除的元素的鍵 | 返回被刪除的元素的數量 |
clear() | 刪除所有元素 | 無 | 無 |
find(const Key& key) | 查找鍵為給定值的元素 | key: 要查找的元素的鍵 | 如果找到,返回指向該元素的迭代器;否則,返回end() |
count(const Key& key) | 返回鍵為給定值的元素的數量 | key: 要查找的元素的鍵 | 返回元素的數量,對于map來說,返回值只能是0或1 |
empty() | 檢查map是否為空 | 無 | 如果map為空,返回true;否則,返回false |
size() | 返回map中的元素數量 | 無 | 返回元素數量 |
operator[] | 訪問或插入指定鍵的元素 | key: 元素的鍵 | 返回指定鍵的元素的引用 |
常用示例:
#include <map>
#include <iostream>int main() {std::map<int, std::string> m;m[1] = "one";m[2] = "two";for (auto it = m.begin(); it != m.end(); ++it) {std::cout << it->first << " => " << it->second << std::endl;}return 0;
}
經常產生的問題:
map
的插入操作可能會改變map中其他元素的迭代器,因此在遍歷map的同時插入元素是不安全的。map
的operator[]
操作如果找不到指定的鍵,會插入一個具有該鍵和默認值的元素。