map和unordered_map都是c++中可以充當字典(key-value)來用的資料型別,但是其基本實現是不一樣的。
對於map的底層原理,是通過紅黑樹(一種非嚴格意義上的平衡二叉樹)來實現的,因此map內部所有的資料都是有序的,map的查詢、插入、刪除操作的時間複雜度都是o(logn)。此外,map的key需要定義operator <,對於一般的資料型別已被系統實現,若是使用者自定義的資料型別,則要重新定義該操作符。
map的基本操作如下
#include#include#includeusing namespace std;int main()
bool operator < (const person& p) const
};
mapm;
unordered_map和map類似,都是儲存的key-value的值,可以通過key快速索引到value。不同的是unordered_map不會根據key的大小進行排序,儲存時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的。unordered_map的底層是乙個防冗餘的雜湊表(開鏈法避免位址衝突)。unordered_map的key需要定義hash_value函式並且過載operator ==。
雜湊表最大的優點,就是把資料的儲存和查詢消耗的時間大大降低,時間複雜度為o(1);而代價僅僅是消耗比較多的記憶體。雜湊表的查詢時間雖然是o(1),但是並不是unordered_map查詢時間一定比map短,因為實際情況中還要考慮到資料量,而且unordered_map的hash函式的構造速度也沒那麼快,所以不能一概而論,應該具體情況具體分析。
unordered_map的基本操作
#include#include#includeusing namespace std;int main()
C 中map和hash map的區別
這裡列幾個常見問題,應該對你理解和使用hash map比較有幫助。建構函式。hash map需要hash函式,等於函式 map只需要比較函式 小於函式 儲存結構。hash map採用hash表儲存,map一般採用紅黑樹 rb tree 實現。因此其記憶體資料結構是不一樣的。總體來說,hash map...
C 中的hash map和map的區別
1 為什麼需要hash map 例如 我要記錄乙個人名和相應的儲存,而且隨時增加,要快速查詢和修改 岳不群 華山派掌門人,人稱君子劍 張三丰 武當掌門人,太極拳創始人 東方不敗 第一高手,葵花寶典 注 如果你使用stl 的map容器,你可以非常方便的實現這個功能,而不用關心其細節。include i...
C 中map的使用和基本操作
1 map簡介 map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。2 map的功能 自動建立key value的對應。key 和 value可以是任意你需要的型別。根據key值快速查詢記錄...