2013-10-08 32 views
0

我有以下幾點:C++:Swaping地圖一個地圖

typedef std::map<int, std::map<std::string, std::string> > ComplexMap; 
ComplexMap map_a; 
ComplexMap map_b; 

我希望交換的整個map_a到map_b。有以下兩個選項之間的功能性差異:

// 1 

ComplexMap::iterator end = map_a.end; 
for (ComplexMap::iterator it = map_a.begin(); it != end; ++it) 
{ 
    mam_b[it->first].swap(it->second); 
} 

// 2 

map_b.swap(map_a); 
+0

第一個不編譯(錯字!) –

+0

我不認爲第一個是有意義的。你對這些地圖有任何限制嗎? –

+0

假設'map_b'爲空,'map_a'爲非空。然後第一個代碼片段不會生成正確的結果。代碼'map_a'仍然是非空的。 – timrau

回答

6

第一版本具有線性複雜(O(N))和不正確地交換地圖的元件,除非它們具有相同的密鑰。

第二個具有不變的複雜性(O(1))並正確地交換了地圖的元素。你應該更喜歡第二個。

0

第二個選項應該比第一個選項更高效,因爲map.swap會立即交換整個內容,而不是迭代整個內容並移動它。也是第一個選項真的很難理解。

希望這會有所幫助, Razvan。