提示:先閱讀更新!
當前的C++ 11標準和C++ 14草案不提供用於啓用此功能的成員函數。作爲拉夫爾建議你仍然可以寫
m.insert(make_move_iterator(begin(temp)),
make_move_iterator(end (temp)));
將從源容器的值移動到目標容器中。但是,容器節點和密鑰都不會移動。這需要內存分配(至少用於在目標映射中創建新節點)。源容器中元素的數量將保持不變。複製背後的原因很簡單:std::map
的值類型是std::pair<const Key,T>
。從const Key
移動本質上是複製密鑰(除非有人超載Key
構造函數,它採取const Key &&
,我想不出有足夠的理由)。
如果您需要將數據從一個容器移動到另一個容器,則可以考慮使用std::list
而不是std::map
。它有一個member function splice
,它可以將元素從一個列表中移動到另一個列表中。
UPDATE:
由於C++ 17有基本上把之一std::map
所有元素到另一個std::map
無需移動或複製實際的元件的功能std::map::merge()
,但僅通過repointing內部指針。這與自C++ 98以來存在的std::list::splice()
非常相似。
所以,你可能寫
m.merge(temp);
來實現自己的目標。這比將所有元素從一個容器複製或移動到另一個容器更有效。
但要小心!衝突的鑰匙不會被解決:對於一致的鑰匙什麼都不會做。
雖然'const key'會在移動這對時被複制,而'temp'會保持相同數量的元素,'T'會st如果'T'是一個像'std :: vector'這樣的移動語義的大型結構,這仍然有意義,對吧? – iavr
@lavr的確是的。 –