2013-03-24 34 views
2

mapshash_maps都被設計爲pairs<key, data>。我很清楚爲什麼地圖應該有一個排序的關鍵(更精確地說:樹),但我不明白爲什麼hash_maps需要一個鍵,爲什麼它不能將數據散列並放入散列表?C++ std :: hash_map:密鑰的作用是什麼

我無法在文檔中找到答案,也沒有通過搜索網絡找到答案。

+0

http://en.wikipedia.org/wiki/Hash_table沒有回答你的問題? – Rapptz 2013-03-24 09:32:31

+0

所以在地圖中,爲什麼不能單獨使用數據進行排序(或樹形結構)?在這兩種情況下,被建模的概念都是字典的概念,這就是爲什麼你分解成密鑰和相關數據的原因,因爲這是一個有用的想法,而不是任何實現的原因。如果你不需要一個密鑰,那麼你正在爲一個集合建模,並且你會使用一個std :: set或一個set :: unordered_set。 – john 2013-03-24 09:37:03

+0

地圖不包含樹的關鍵。地圖包含一個關鍵字,因爲它是一張地圖。它將鍵映射到值。樹形是與實現有關的。 – juanchopanza 2013-03-24 10:13:35

回答

4

std::unordered_set作品正是你所描述的方式。但是,有時您想從一個數據映射到另一個數據;這就是std::unordered_map進場的地方。

4

走向櫥櫃。取出電話簿並查找號碼。它有一個名稱和編號

+0

贊:)但接受的答案已經由亞歷克斯在他之前。 – Subway 2013-03-24 09:42:23

+0

我喜歡我的隱喻。他們豐富了我的生活。享受 – 2013-03-24 09:49:19

+0

+1很棒的答案。 – 2013-03-24 18:11:22

0

散列映射也稱爲Unordered Map之間的映射使用KEY作爲桶或其它Slots.In字的indexHASH,任何哈希表需要一個散列函數來計算index成從中可以找到正確值的桶或槽陣列。這些index是哈希表的密鑰,用於在最佳情況下訪問O(1)時間的數據。

+0

恐怕你是錯的,關鍵是hash_map對結構的一部分,散列函數的結果散列是兩個不同的東西。 – Subway 2013-03-24 09:44:49

0

如果要將數據本身用作密鑰,則適當的容器是std::setstd::unordered_set。一張地圖同時包含一個關鍵字和一個值; std::mapstd::unordered_map之間的差異在如何組織數據; std::map按鍵排序,std::unordered_map按鍵排序。