散列表類型 | 有無關系值 | 接受相同鍵值 |
---|---|---|
std::unordered_set |
否 | 否 |
std::unordered_multiset |
否 | 是 |
std::unordered_map |
是 | 否 |
std::unordered_multimap |
是 | 是 |
std::map
和std::unordered_map
區別:
std::map |
std::unordered_map |
|
---|---|---|
頭文件 | #include <map> |
#include <unordered_map> |
內部實現 | map 內部實現了一個紅黑樹,紅黑樹具有自動排序的功能,因此map內部的所有元素都是有序的,紅黑樹的每一個節點都代表着map的一個元素。 |
unordered_map 內部實現了一個哈希表,其元素的排列順序是無序的,根據關鍵碼值而進行直接訪問的數據結構。 |
優點 | 有序性,在很多應用中都會簡化很多的操作,效率非常的高 | 查找速度非常的快 |
缺點 | 空間占用率高,因為紅黑樹每一個節點都需要額外保存父節點、孩子節點和紅/黑性質,使得每一個節點都占用大量的空間 | 哈希表的建立比較耗費時間 |
適用 | 有順序要求的問題 | 查找問題 |
unordered_map
的占用的內存比map高, 但unordered_map
執行效率要比map
高很多 。
unordered_map
的用法和map
是一樣的,提供了 insert
,size
,count
等操作,並且里面的元素也是以pair
類型來存儲的。