我有一个std::map对象。
std::map<std::string, std::string> m;
m.insert({ "abcd", "foo" });
m.insert({ "1234", "bar" });
Run Code Online (Sandbox Code Playgroud)
我想获取并删除第一个元素,例如:
auto iter = m.begin();
auto [key, value] = std::move(*iter);
m.erase(iter);
do_something_with(key, value);
Run Code Online (Sandbox Code Playgroud)
这被认为是安全的吗?(从迭代器移动应该使键成为空字符串,这使得映射m无效。)
std::map::extract你可以这样使用:
auto nh = m.extract(m.begin());
Run Code Online (Sandbox Code Playgroud)
然后像这样使用键和值:
do_something(nh.key(), nh.mapped());
Run Code Online (Sandbox Code Playgroud)
这具有不需要制作额外副本的所需属性。