gpt4 book ai didi

c++ - 如何在迭代时从 map 中删除?

转载 作者:IT老高 更新时间:2023-10-28 11:30:59 25 4
gpt4 key购买 nike

如何在迭代时从 map 中删除?喜欢:

std::map<K, V> map;
for(auto i : map)
if(needs_removing(i))
// remove it from the map

如果我使用 map.erase 它将使迭代器无效

最佳答案

标准的关联容器删除习语:

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
if (must_delete)
{
m.erase(it++); // or "it = m.erase(it)" since C++11
}
else
{
++it;
}
}

请注意,我们真的想要一个普通的 for 循环,因为我们正在修改容器本身。基于范围的循环应该严格保留在我们只关心元素的情况下。 RBFL 的语法通过甚至不将容器暴露在循环体中来清楚地说明这一点。

编辑。 在 C++11 之前,您无法删除 const-iterators。在那里你不得不说:

for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }

从容器中删除元素与元素的常量性并不矛盾。以此类推,delete p 总是完全合法的,其中 p 是指向常量的指针。常量不限制生命周期; C++ 中的 const 值仍然可以停止存在。

关于c++ - 如何在迭代时从 map 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com