[英]std::map emplace without copying value
C++11 std::map<K,V>
類型有一個emplace
函數,許多其他容器也是如此。
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
這段代碼按照宣傳的方式工作,直接放置std::pair<K,V>
,但它會生成key
和val
的副本。
是否也可以將值類型直接放入地圖中? 我們能比將調用中的參數移動到emplace
做得更好嗎?
這是一個更徹底的例子:
struct Foo
{
Foo(double d, string s) {}
Foo(const Foo&) = delete;
Foo(Foo&&) = delete;
}
map<int,Foo> m;
m.emplace(1, 2.3, string("hello")); // invalid
在 C++17 中,這可以通過try_emplace
方法更容易地實現。
map<int,Foo> m;
m.try_emplace(1, 2.3, "hello");
標准庫中的這一新增內容在論文 N4279 中進行了介紹,並且應該已經在Visual Studio 2015 、 GCC 6.1和LLVM 3.7 (libc++ 庫)中得到支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.