1.定義
map是一類關聯容器,他提供一對一的數據處理能力。它的特點是增加和刪除節點對迭代器的影響很小。而且map可以修改實值,而不能修改key。注意使用需要加頭文件#include<map>
2.基本函數
2.1.構造函數
- std::map<int,int> ma1:創建一個空的map。
- std::map<int, int> ma1{ { 0, 0 }, { 1, 2 }, { 2, 3 } }:創建一個擁有元素{0,0},{1,2},{2,3}的map
- std::map<int, int> ma2(ma1):創建一個和ma1相同的ma2
- std::map<int, int> ma3(ma2.begin(),ma2.end()):創建一個擁有[begin(),end()]之間元素的map
2.2.添加元素
- ma1.insert(std::pair<int,int>(1,1)):添加一個元素(1,1)。但是當再次添加相同key的pair的時候將無法添加
- ma1.insert(std::map<int,int>::value_type(1,1)):效果和上面一樣
- ma1[1]=3:添加元素(1,3),當再次添加相同key的元素時候將會把之前的值覆蓋
2.3.刪除元素
- ma1.erase(iter):使用迭代器從map中刪除元素
- ma1.erase(1):從map中刪除key爲1的元素
- ma1.clear():將map中的所有元素刪去
2.4.map中重要的迭代器
- ma1.begin():返回正向迭代器的第一個元素
- ma1.end():返回正向迭代器的最後一個元素的下一個位置
- ma1.rbegin():返回反向迭代器的第一個元素,即vector中的最後一個元素
- ma1.rend():返回反向迭代器的最後一個元素的下一個位置,即vector中的第一個元素的前一個位置
2.5.map其他函數
- ma1.empty():判斷ma1是否爲空
- ma1.size():返回ma1中元素的個數
- ma1.find(key):返回ma1中key所對應的迭代器
- ma1.count(key):返回ma1中key所對應元素個數(爲0或1)
3.map使用實例
- upper_bound(),lower_bound():返回鍵值大於,小於等於給定元素的第一個位置
#include<iostream>
#include<map>
void main(){
std::map<int, int> ma1;
ma1[1] = 2;
ma1[9] = 10;
ma1[5] = 6;
ma1[3] = 4;
ma1[7] = 8;
ma1[11] = 12;
std::cout << ma1.upper_bound(5)->first << "," << ma1.lower_bound(5)->first;
}
- swap():交換兩個map
#include <numeric>
#include<iostream>
#include<map>
void main(){
std::map<int, int> ma1{ { 1, 2 }, { 3, 4 }, { 5, 6 } };
std::map<int, int> ma2{ { 7, 8 }, { 9, 10 }, { 11, 12 } };
swap(ma1, ma2);
std::cout << "ma1 ";
for (auto ll : ma1)
{
std::cout << "{" << ll.first << "," << ll.second << "}";
}
std::cout << std::endl;
}