C 中unordered map的用法

2021-10-09 04:52:05 字數 1466 閱讀 9050

c++使用unordered_map

#include//在unordered_map之前加上tr1庫名,

using namespace std::tr1;//與此同時需要加上命名空間

[查詢元素是否存在]

若有unordered_map mp;查詢x是否在map中

方法1: 若存在 mp.find(x)!=mp.end()

方法2: 若存在 mp.count(x)!=0

[插入資料]

mp.insert(map::value_type(1,"raoul"));
[遍歷map]

unordered_map::iterator it;

(*it).first; //the key value

for(unordered_map::iterator iter=mp.begin();iter!=mp.end();iter++)

//也可以這樣

for(auto& v : mp)

print v.first and v.second

內部實現機理

map:map內部實現了乙個紅黑樹,該結構具有自動排序的功能,因此map內部的所有元素都是有序的,紅黑樹的每乙個節點都代表著map的乙個元素,因此,對於map進行的查詢,刪除,新增等一系列的操作都相當於是對紅黑樹進行這樣的操作,故紅黑樹的效率決定了map的效率。

unordered_map: unordered_map內部實現了乙個雜湊表,因此其元素的排列順序是雜亂的,無序的

map內部是紅黑樹,在插入元素時會自動排序(預設按key排序),而無序容器unordered_map內部是雜湊表,通過雜湊而不是排序來快速操作元素,使得效率更高。當你不需要排序時選擇unordered_map的效率更高。

[缺點以及適用處]

map優點:有序性,這是map結構最大的優點,其元素的有序性在很多應用中都會簡化很多的操作

紅黑樹,內部實現乙個紅黑書使得map的很多操作在的時間複雜度下就可以實現,因此效率非常的高

缺點:空間佔用率高,因為map內部實現了紅黑樹,雖然提高了執行效率,但是因為每乙個節點都需要額外儲存父節點,孩子節點以及紅/黑性質,使得每乙個節點都占用大量的空間

適用處,對於那些有順序要求的問題,用map會更高效一些

unordered_map

優點:因為內部實現了雜湊表,因此其查詢速度非常的快

缺點:雜湊表的建立比較耗費時間

適用處,對於查詢問題,unordered_map會更加高效一些,因此遇到查詢問題,常會考慮一下用unordered_map

C 中map和unordered map的用法

map和unordered map都是c 中可以充當字典 key value 來用的資料型別,但是其基本實現是不一樣的。對於map的底層原理,是通過紅黑樹 一種非嚴格意義上的平衡二叉樹 來實現的,因此map內部所有的資料都是有序的,map的查詢 插入 刪除操作的時間複雜度都是o logn 此外,ma...

C 中unordered map幾種按鍵查詢比較

unorder map有3種常見按鍵查值方法。使用標頭檔案和,以及命名空間std。第一種是按鍵訪問。如果鍵存在,則返回鍵對應的值 如果鍵不存在,則返回0 1 include2 include3 4using namespace std 56 intmain 1314 15016 117 利用第一種訪...

C 中unordered map的版本相容性問題

在c 中最讓我蛋疼的事情之一就是unordered map千呼萬喚才出來,在c 早期版本標準庫裡面只有map這個字典。但是map的內部實現是採用的紅黑樹,眾所周知,對於字典這類結構也可以用hash表來實現,也就是c 的標準庫應該也要有hash map這種資料結構。在c 中關於map的hash表方法的...