簡體   English   中英

C ++-直接插入std :: map中,無需賦值運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM