2009-10-29 55 views
39

我最近發現用C++實現哈希映射將被稱爲unordered_maphash_map和unordered_map之間的區別?

當我擡頭一看,爲什麼他們不只是使用hash_map,我發現,顯然有與hash_mapunordered_map做出決議(更多關於它here)實施的兼容性問題。

該wiki頁面沒有提供更多的信息,所以我想知道是否有人知道hash_mapunordered_map解決的一些問題。

回答

63

由於在C++標準庫中沒有定義哈希表,所以標準庫的不同實現者將提供一個非標準哈希表,通常名爲hash_map。因爲這些實現不是遵循標準編寫的,所以它們在功能和性能保證方面都有細微差別。

C++11開始,哈希表實現已被添加到C++標準庫標準中。決定使用該類的替代名稱來防止與這些非標準實現的衝突,並防止開發人員在其代碼中無意使用新類。

被選中的備用名稱是unordered_map,它確實更具描述性,因爲它暗示了該類的地圖界面及其元素的無序性。

+4

這是表明'std'命名空間並不完全符合他們希望的東西之一。不是我知道什麼可以合理地避免這個問題。 – 2009-10-29 20:22:42

+1

嵌套命名空間,如tr1 ... – 2009-10-30 07:29:59

+0

MSVC對其標準擴展庫具有stdext。 – Puppy 2010-11-04 17:45:10