前言
在 C++ 基礎語法 #7 的時候,我們介紹了 unorder_set(),
今天我們要來介紹另外一個也是相關,但更實用的 unorder_map() !!!
快速破題
unorder_set(),就是 set 的一種,用來 hash 單一項目,
unorder_map(),屬於 table 的一種 (Python 我們會說 dict),用來 hash key-value pair 的項目,
也因此,我們可以快速透過 unorder_map 的方式,
快速地透過 hash key 來找到我們想要的 value。
注意事項 (include header)
使用前,我必須要記得「#include
#include <unordered_map>
使用方法 1 – 宣告 unorder_map
這裡舉例一個常見的用法,我們把 string 這個方法給 include 進來,
然後我們就可以建立一個 unorder_map (如同 Python Dict 那樣)
範例程式碼
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main(){
std::unordered_map<std::string, std::string> u_map = {
{"key1","value1"},
{"key2","value2"},
{"key3","value3"}
};
cout << u_map["key1"] << endl;
return 0;
}
結果
使用方法 2 – 遍歷 unorder_map (first, second)
另外一個我們也會經常用到的用法,
我們會想要遍歷整個 unorder_map,
我們可以透過 std::pair 的方式來遍歷 unorder_map 的內容
範例程式碼
我們繼續接續上面那一段的程式碼,我們接下來加上下面這一段。
for(const std::pair<std::string, std::string>& ele: u_map){
cout << "u_map[" << ele.first << "] = " << ele.second << endl;
}
結果
或把上述的內容用 auto 簡化
for(const auto& ele: u_map){
cout << "u_map[" << ele.first << "] = " << ele.second << endl;
}
結果
一些細節 – 關於 const
這裡必須要加 const 的原因,因為透過 pair 拿出來的值,是臨時的值,
我們無法進行修改,因此必須給予 const 屬性。
這邊觀念不是很確定,有錯歡迎指正。
一些細節 – 關於 &
這裡其實我們如果不使用 & 程式也是可以跑的,
不過我們可以想像 std::pair 的時候,
他是每一次都宣告一個新的記憶體空間「為了儲存我們遍歷拿出來的值」,
但是我們在 for 迴圈的時候,其實沒有必要每一次都宣告一個新的記憶體空間,
因此我們這邊加上 &,讓我們只要宣告一次的記憶體空間進行遍歷操作即可。
這邊觀念不是很確定,有錯歡迎指正。