2016-02-25 59 views
1

我有一個map<int,map<int,string>> themap可能的交換映射元素沒有複製?

我想交換元素themap [1]和地圖[2]。但內部地圖map<int,string>是非常大的,所以我不希望他們複製。有辦法做到這一點,或者我必須改變地圖使用指針。

回答

4

您可以嘗試std::map::swap對外部映射:容器

void swap(map& other);

交流的內容與其他。不對單個元素調用任何移動,複製或交換操作。

3
themap[1].swap(themap[2]); 

這不會複製,甚至是移動,在地圖上的任何元素。它可能只是交換根節點的所有權,只是幾個指針分配。

+1

正確的答案,嚴重解釋。 –

+0

謝謝。這是我需要的。 – steviekm3

0

您可以使用std::swap,因爲它具有std::map(以及許多其他容器和庫類型)的專業化。

std::swap(themap[1], themap[2]); 

它調用std::map::swap但我認爲在使用std::swap和信任標準委員會和庫的實現做正確的事的習慣得到它是非常有用的。

+0

假設不存在交換,可以映射一個或std :: swap。一個人可以自己寫嗎?或者我們是否需要訪問私人地圖成員? – steviekm3

+0

如果您正在創建自己的類型,預期的方法是在與您的類型相同的名稱空間中寫入非成員'swap'。然後客戶端代碼將寫'使用std :: swap;交換(a,b);'。這將通過重載解析和參數依賴查找找到您的非成員交換,'std :: swap'專業化或其他匹配函數。請參閱[可交換概念上的cppreference頁面](http://en.cppreference.com/w/cpp/concept/Swappable)。 – Blastfurnace