2014-04-24 42 views
6

目前,我有向量中的一些數據。目前,我想將矢量轉換爲地圖。
所以它會被組織如下(N是偶數)。如何以優雅的方式將矢量複製到STL地圖

向量:元件1,元件2,元件3,元件4 ...元件N

圖:KEY1:元件1,值1:元件2,KEY2:元件3 VALUE2:元件4 ...

目前,我只是枚舉向量,有沒有其他優雅的方式來做到這一點。更喜歡C++ 11。謝謝。

for (int x = 0; x < vec.size();) 
{ 
    map[vec[x]] = vec[x+1]; 
    x+=2; 
} 
+2

'X + = 2'可以去在循環頭第二個分號之後。 – dasblinkenlight

+0

我不能讓你的頭像和尾巴描述你的地圖應該是什麼樣子。爲什麼它有鍵,值*和*元素,爲什麼這些數字不符合規定?而矢量中的元素如何成爲地圖中的鍵和值? –

+2

您應該檢查奇數個元素,除非您確定不會發生。否則,看起來不錯。 –

回答

6

您的代碼有效(注意Michael J建議不要處理最後一個元素,如果有奇數)。

有一個小的改進,可以作出。調用map[vec[x]]使用value_type的默認構造函數構造條目,然後複製分配運算符複製vec[x+1]中的值。

你可以這樣做避免了複製分配步驟:

the_map.insert(std::make_pair(vec[x], vec[x+1])); 

我認爲這最終有來自一對映射條目拷貝構造。在C++ 11中,你可以這樣做:

the_map.emplace(vec[x], vec[x+1]); 

它允許編譯器儘量減少複製完成量。如果你的對象支持移動語義和要算賬破壞載體,你甚至可以去:

the_map.emplace(std::move(vec[x]), std::move(vec[x+1])); 
+1

由於返回值優化,通常不會執行額外的拷貝構造,因爲std :: make_pair返回臨時值。在C++ 11中,由於移動語義,兩個版本都不會製作額外的副本。 – Veritas

+1

好的,謝謝你的信息。我沒有及時瞭解到底可以做什麼 –

相關問題