【C++】map、unordered_map的基本操作與用法

一、頭文件

#include "map"
#include "unordered_map"

二、原理

map內部是用紅黑樹(不嚴格平衡的二叉排序樹)實現的,能夠根據插入鍵值的不同進行自動排序,中序遍歷該樹即可得到從小到大遞增的鍵值。

unordered_map內部是用哈希表實現,通過特殊的函數把Key值映射到哈希表中的一個位置來訪問記錄,查找時間複雜度可達到O(1)。

因此,map適用於有序的問題,unordered_map適用於查找的問題。

三、用法

map與unordered_map相同,只需將下面的map換成unordered_map即可。

1、初始化

map<int, char> myMap;
map<int, char> myMap = {
                { 1, 'a' },
                { 2, 'b' },
                { 3, 'c' } };

2、插入

//直接通過數組方式插入
myMap[10]='y';
// 插入單個鍵值對
myMap.insert(pair<int, char>(6, 'h'));
//在指定位置插入,效率更高,不需要排列
myMap.insert(myMap.begin()+3, pair<int, char>(101, 't'));
// 多個鍵值插入
myMap.insert({ {100, 'i'}, {200, 'q'} });
//範圍多鍵值插入
map<int,char> secondMap;
secondMap.insert(myMap.begin(), myMap.end());

3、取值

//數組方式取值,若不存在該鍵值,得到空
myMap[100];
//at會下標檢查,若不存在該鍵值會被報錯
myMap.at(20);

4、判空

//空返回true 非空返回false
myMap.empty();

5、容量

int length = myMap.size();

6、刪除

//erase(const key_type& key) 通過參數Key來進行刪除
myMap.erase(1);
//刪除迭代器位置的鍵值對,並返回指向下一元素的迭代器
myMap.erase(myMap.begin());
// 刪除一定範圍內的元素,並返回一個指向下一元素的迭代器
// 注意:map的迭代器不允許使用+n運算,但可以++
mymap.erase(mymap.begin(), ++mymap.begin());

 7、清空

myMap.clear();

8、交換

//交換兩個map的內容
map<int,char> secondMap = {5,'t'};
secondMap.swap(myMap);

9、順序比較

//比較兩個關鍵字在map中位置的先後,第一個key在前就返回1,否則0
mymap.insert(std::pair<int, char>(2, 'a'));
mymap.insert(std::pair<int, char>(1, 'b'));
//該用例返回1,因爲map是有序的紅黑樹,即使是先插入2,再插入1
std::map<int, char>::key_compare mycomp = mymap.key_comp();
int res = mycomp(1, 2);
cout << res;

10、查找

//關鍵字查詢,找到返回指向該關鍵字的迭代器,否則返回指向end的迭代器
map<int,char>::iterator it = myMap.find(1);
if(it != myMap.end())//存在該鍵值
    cout << it->second;

11、迭代器

//迭代器有八種 begin、end、rbegin、rend和對應的const型 cbegin、cend、crbegin、crend
myMap.begin();//map的第一個鍵值對
myMap.rbegin();//map的最後一個鍵值對

12、遍歷

//通過迭代器的first得到key值,second得到value值
//正序遍歷
for(map<char,int>::iterator it = myMap.begin();it!=myMap.end();it++)
    cout << "key:" << it->first << "  value:" << it->second << endl;
//逆序遍歷
for (map<int, char>::reverse_iterator it = mymap.rbegin(); it != mymap.rend(); it++)
    cout << "key:" << it->first << "  value:" << it->second << endl;

參考:https://blog.csdn.net/shuzfan/article/details/53115922#%E4%B8%80-%E5%A3%B0%E6%98%8E

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章