常见的建议是在几乎所有情况下都优先std::map::try_emplace使用std::map::emplace。 我编写了一个简单的测试来跟踪调用这些函数时的对象创建/复制/移动/销毁,无论是否发生冲突,结果表明,try_emplace当密钥尚未在地图中时,会产生额外的移动和销毁密钥。
1,2)Same as foremplace 3,4)Same as foremplace_hint Complexity 1,2)Same as foremplace 3,4)Same as foremplace_hint Notes Feature-testmacroValueStdComment __cpp_lib_map_try_emplace201411L(C++17)std::map::try_emplace,std::map::insert_or_assign ...
try_emplace() 处理 --- 的键和参数,这使得它比用 value_type 表示的通用 mapped_type 体更直观(即 std::pair )。
myMap.emplace(std::pair<int,std::string>(6,"a")); 使用std::make_pair进行emplace myMap.emplace(std::make_pair(6,"a")); 1.1.5emplace_hint(C++11) 1.1.6try_emplace(C++17) try_emplace函数主要作用是如果容器中没有相同键的元素,则将新元素插入到容器中,其新元素使用给定的args构造。 #include...
myMap.emplace(key, value); 使用try_emplace 方法(C++17 引入): cpp auto result = myMap.try_emplace(key, value); 使用insert_or_assign 方法(C++17 引入): cpp auto result = myMap.insert_or_assign(key, value); 示例代码 以下是一个向 std::map 中添加元素的示例代码: ...
std::map<Key,T,Compare,Allocator>::try_emplace C++ Containers library std::map template<class...Args> std::pair<iterator,bool>try_emplace(constKey&k, Args&&...args); (1)(since C++17) template<class...Args> std::pair<iterator,bool>try_emplace(Key&&k, Args&&...args); ...
std::move和std::forward只是执行转换的函数(确切的说应该是函数模板)。std::move无条件的将它的参数...
1,2) 同emplace 3,4) 同emplace_hint 注意 不同于 insert 或emplace ,若不发生插入,则这些函数不从右值参数移动,这令操纵 value 为仅移动类型的 map ,如 std::map<std::string, std::unique_ptr<foo>> 更为容易。另外, try_emplace 分离地处理关键和到 mapped_type 的参数,不同于要求参数构造 value_...
不同于 insert 或emplace ,若不发生插入,则这些函数不从右值参数移动,这令操纵 value 为仅移动类型的 map ,如 std::map<std::string, std::unique_ptr<foo>> 更为容易。另外, try_emplace 分离地处理关键和到 mapped_type 的参数,不同于要求参数构造 value_type (即一个 std::pair )的 emplace。
并且改变第二个调用,使其不接收参数,这与const MyClass &相反。.emplace()的参数直接指向the constructor ofstd::pair,如果检查构造函数,可以默认构造第二个元素的唯一构造函数(不包括该对自己的默认构造函数)似乎是std::piecewise_construct。而.try_emplace()只是在内部使用std::piecewise_construct。