- map 是關聯容器的一種, 其每個元素分爲 關鍵字 和 該關鍵字的值 兩部分
- map 容器中關鍵字唯一, 且按關鍵字排序
常見接口 | 接口作用 |
---|---|
begin() | 返回指向 map 頭部的迭代器 |
end() | 返回指向 map 末尾的迭代器, 最後一個元素的下一個 |
count() | 返回指定元素出現的 次數 |
size() | 返回map中元素的 個數 |
max_size() | 返回可以容納的 最大元素個數 |
insert() | 插入元素 |
find() | 查找一個元素, 返回一個迭代器 |
equal_range | 返回兩個迭代器,第一個表示 <= 查找元素 的迭代器位置,第二個是 >它 的迭代器位置 |
empty() | 如果 map 爲空則返回 true |
erase() | 刪除一個元素 |
clear() | 刪除所有元素 |
swap() | 交換兩個 map |
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, string> myMap;
// 三種插入方式
// 1. [] 直接插入
myMap[1] = "Aaaaaaa";
// 如果再有
myMap[1] = "Aaaa";
// 則會覆蓋掉前面的"Aaaa", 因爲 map 關鍵字的唯一性
// 當然, 如果關鍵字爲 1 的元素不存在, 就會新建並且插入 map
// 2. 利用 insert 函數
// (1)通過 pair<int, string>(2, ”Bbbb“) 構造 pair 元素
myMap.insert(pair<int, string>(2, "Bbbb"));
// (2)通過 make_pair 構造 pair 元素
myMap.insert(make_pair(3, "Cccc"));
// (3)通過 value_type 構造 pair 元素
myMap.insert(map<int, string>::value_type(4, "Dddd"));
// 用 insert 重複插入 則不成功
pair<map<int, string>::iterator, bool> ptr = myMap.insert(make_pair(1, "Aaaaaaa"));
if(ptr.second) {
cout << "插入成功" << endl;
} else {
cout << "插入不成功" << endl;
}
// 元素的刪除
// 刪除 值爲 "Dddd" 的元素
for(map<int, string>::iterator ptr = myMap.begin(); ptr != myMap.end(); ptr++) {
if(ptr->second.compare("Dddd") == 0) {
myMap.erase(ptr);
cout << "刪除成功" << endl;
}
}
myMap[5] = "Eeee";
// 統計 Eeee 出現的次數
cout << myMap.count(11) << endl;
// 查找 key = 4 的鍵值對
map<int, string>::iterator pt = myMap.find(4);
if(pt != myMap.end()) {
cout << "存在 key 值爲 4 的鍵值對" << endl;
} else {
cout << "不存在 key 值爲 4 的鍵值對" << endl;
}
// 查找 key = 4 的鍵值對的位置
// 返回兩個迭代器,第一個表示 <=4 的迭代器位置,第二個是 >4 的迭代器位置
pair<map<int, string>::iterator, map<int, string>::iterator> myPair = myMap.equal_range(4);
if(myPair.first == myMap.end()) {
cout << "小於等於 4 的位置不存在" << endl;
} else {
cout << myPair.first->first << " " << myPair.first->second << endl;
}
if(myPair.second == myMap.end()) {
cout << "大於 4 的位置不存在" << endl;
} else {
cout << myPair.second->first << " " << myPair.second->second << endl;
}
// 遍歷 map
for(auto ptr: myMap) {
cout << ptr.first << " " << ptr.second << endl;
}
// 清除 map
myMap.clear();
// map 是否爲空
cout << "map 是否爲空: " << myMap.empty() << endl;
return 0;
}
注意: map 和 multimap 十分類似,區別在於 map 容器中元素的關鍵字不能重複。而 multimap 可以, multimap 有的成員函數,map 都有。此外,map 還有成員函數 operator[ ]:T & operator[ ] (Key k);
該成員函數返回 first 值爲 k 的元素的 second 部分的引用。如果容器中沒有元素的 first 值等於 k,則自動添加一個 first 值爲 k 的元素。如果該元素的 second 成員變量是一個對象,則用無參構造函數對其初始化。