[英]C++ - insert into std::map directly without assignment operator
我有一個std::map
,我想將一個對象插入其中,但是我想避免不必要的復制,因為它是一個大對象,復制需要時間。 我嘗試了這個:
MyPODType data(otherData);
data.modify();
myMap["Some key"] = data;
但是,這需要2個副本:一個要復制otherData
,另一個要在賦值運算符中插入對象。 由於是POD,因此復制構造函數和賦值運算符均為默認值。
我該如何只復制一份? 我意識到有些編譯器會優化第二個副本,但是我想以一種可移植的方式來實現。
(我假設MyPODType
是您的map
的確切value_type
)
正如Igor Tandetnik在評論中指出的那樣,由於C ++ 11,您可以編寫:
myMap.emplace("Some key", otherData);
然后您可以在地圖中的值上調用modify()
。
emplace
函數將使用完美的轉發將您的參數分別轉發到鍵和值的構造函數,而不必創建臨時的std::pair
或default-construct一個值。
也可以使用insert
:
std::pair<KeyType, MyPODType> p = { "Some key ", otherData };
p.second.modify();
myMap.insert( std::move(p) );
盡管emplace
選項似乎更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.