分類

展開全部 | 收合全部

分類

展開全部 | 收合全部

【C++ 基礎語法 #8】C++ unorder_map() 用法筆記 (類似 Python Dict)

前言

在 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 迴圈的時候,其實沒有必要每一次都宣告一個新的記憶體空間,
因此我們這邊加上 &,讓我們只要宣告一次的記憶體空間進行遍歷操作即可。

這邊觀念不是很確定,有錯歡迎指正。

Reference

⭐C++ 基礎用法 相關文章整理⭐:
1.【C++】C++ compile 程式碼 使用 c++ 11 與使用相關的 package
2.【C++】C/C++ 顯示資料的類別 (type) sample code (內含範例程式碼) print C data type, cout C++ data type, get variable type in c++
3.【C++】C++ 複製 2D array的方法 copy 2d array memcpy sample code (內含範例程式碼)
⭐Modern C++ ⭐:
⭐C++ 字串處理相關文章整理⭐:
1.【C++】字串 char string stringstream 相關用法總整理 (內含範例程式碼) 與利用 sprinf, snprinf assign 值的方法
2.【C++】字串 char string stringstream 「轉換」用法總整理 (內含範例程式碼)
3.【C】printf, fprintf, sprintf, snprintf 相關用法總整理 (內含範例程式碼)
4.【C++】C++ String 用法 連接兩個 String c++ string concat
⭐C++ 系統偵測相關文章整理⭐:
1.【C++】C++ 利用 dirent.h 計算資料夾的檔案數量 count files sample code (內含範例程式碼)
2.【C++】C++ inotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
⭐C++ OpenCV 相關文章整理⭐:
1.【OpenCV】c++ OpenCV – 在 ubuntu 上第一次執行 OpenCV 程式 sample code (內含範例程式碼)
2.【OpenCV】c++ OpenCV - 在圖片上寫上文字 cv::putText sample code (內含範例程式碼)
3.【OpenCV】c++ OpenCV - cv::Rect 矩形用法與相關功能函數 sample code (內含範例程式碼)
4.【OpenCV】c++ OpenCV - OpenCV 中的純量 定義顏色 cv::Scalar(255,255,255) color sample code (內含範例程式碼)
5.【OpenCV】用 C++ 計算 iou 的方法 與網路算法常見錯誤(內附範例程式碼) sample code
⭐C++ Makefile 相關文章整理⭐:
1.【C++ Makefile】- 1 / 嘗試撰寫自己的第一份 Makefile
2.【C++ Makefile】- 2 / 新增自己的變數
3.【C++ Makefile】- 3 / Makefile 常用變數 -「$@」, 「$^」
4.【C++ Makefile】- 4 / Makefile 常用 fake target -「.PHONY」
5.【C++ Makefile】- 5 / Makefile 內建變數 -「$@」, 「$^」, 「$<」, 「$* 」,「$? 」
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps
Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「?只寫到一半?」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好?

文章: 890

★留個言吧!內容有誤或想要補充也歡迎與我討論!