Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “如何安全”;“流行前沿”;从std::map不带额外副本?_C++_Stl - Fatal编程技术网

C++ “如何安全”;“流行前沿”;从std::map不带额外副本?

C++ “如何安全”;“流行前沿”;从std::map不带额外副本?,c++,stl,C++,Stl,我有一个std::map对象 std::map<std::string, std::string> m; m.insert({ "abcd", "foo" }); m.insert({ "1234", "bar" }); 这样安全吗? (从迭代器中移动应该使键成为空字符串,这使得m映射无效。) 这样安全吗 如果地图不是空的,是的 但是请注意,该键将是一个深度副本;一个也没动。这是因为map元素的键是c

我有一个
std::map
对象

std::map<std::string, std::string> m;

m.insert({ "abcd", "foo" });
m.insert({ "1234", "bar" });
这样安全吗? (从迭代器中移动应该使键成为空字符串,这使得
m
映射无效。)

这样安全吗

如果地图不是空的,是的

但是请注意,该键将是一个深度副本;一个也没动。这是因为map元素的键是const

如何从std::map安全地“弹出前端”,而无需额外拷贝

如果使用
提取
成员功能,也可以从该键移动:

auto handle = m.extract(m.begin());
// if you need separate objects:
auto key = std::move(handle.key());
auto mapped = std::move(handle.mapped());

使用std映射提取。使用生成的节点句柄,将键/值移动到键/值变量

在提取std映射之前,这是不完全可能的。添加了std map extract以允许您执行此操作,以及类似的操作,如拼接贴图。

您可以这样使用:

auto nh = m.extract(m.begin());
do_something(nh.key(), nh.mapped());
然后使用如下键和值:

auto nh = m.extract(m.begin());
do_something(nh.key(), nh.mapped());
这具有不制作额外副本的所需属性