我發現集合和地圖都是以樹的形式實現的。 set是一個二叉搜索樹,map是一個自平衡的二叉搜索樹,比如紅黑樹?我對實施的差異感到困惑。差異我可以形象如下在C++中設置地圖實現
1)集合中的元素只有一個值(鍵),映射中的元素有兩個值。 2)set用來存儲和獲取元素本身。地圖用於通過密鑰存儲和獲取元素。
還有什麼重要的?
謝謝!
我發現集合和地圖都是以樹的形式實現的。 set是一個二叉搜索樹,map是一個自平衡的二叉搜索樹,比如紅黑樹?我對實施的差異感到困惑。差異我可以形象如下在C++中設置地圖實現
1)集合中的元素只有一個值(鍵),映射中的元素有兩個值。 2)set用來存儲和獲取元素本身。地圖用於通過密鑰存儲和獲取元素。
還有什麼重要的?
謝謝!
地圖和集合具有幾乎相同的行爲,實現使用完全相同的基礎技術是很常見的。
唯一重要的不同是map不使用整個value_type進行比較,只是它的關鍵部分。
通常你會馬上知道你需要的東西:如果你只有一個布爾值來表示地圖的「值」參數,你可能需要一個集合。
Set是一個離散數學概念,根據我的經驗,在編程中一次又一次地出現。 stl set類是跟蹤插入/刪除/查找最常見操作的集合的一種相對有效的方式。
地圖用於對象具有與整個屬性集相比較小的唯一標識。例如,一個網頁可以被定義爲一個URL和一個字節的內容流。您可以將該字節流放在一個集合中,但二分查找過程會非常緩慢(因爲內容比URL大得多),並且如果其內容更改,您將無法查找網頁。 URL是網頁的標識,所以它是地圖的關鍵。
一張地圖通常作爲一個集合< std :: pair < >>來實現。
當你想要一個有序列表來快速搜索一個項目,基本上,而當你想要檢索給定的鍵值時使用映射時,使用該集合。
在這兩種情況下,鍵(對於地圖)或值(對於設置)都必須是唯一的。如果要存儲多個相同的值,則可以使用multimap或multiset。
除非真/假/不存在都是不同的狀態。 :)當值的一部分可以改變時(特別是std :: map :: mapped_type),而不改變值的標識,而不僅僅是一個「有效集合」時,就會應用一個映射。 – 2010-02-11 22:28:41