我需要从我的 concurrent_unordered_map 中删除值为 true 的所有项
auto dataMap = new concurrency::concurrent_unordered_map<std::string, bool>();
(*dataMap)["1"] = false;
(*dataMap)["2"] = true;
(*dataMap)["3"] = false;
(*dataMap)["4"] = true;
(*dataMap)["5"] = false;
(*dataMap)["6"] = true;
我进行了长时间的搜索以了解如何正确执行此操作,但是我没有找到解决方案...我最后一次尝试:
auto itr = dataMap->begin();
while (itr != dataMap->end())
{
auto data = (*itr);
if (data.second == true)
{
dataMap->unsafe_erase(data.first);
}
++itr;
}
那么,如何正确地删除项目呢?
编辑:
我正在使用 VC++ 2019
最佳答案
您不能在迭代器上使用 ++
来删除元素。访问已删除的对象会导致未定义的行为。
unsafe_erase
将迭代器返回到删除后的第一个项目(或者 end
如果删除是最后一个)。
所以你可以这样写:
while (itr != dataMap->end())
{
auto data = (*itr);
if (data.second == true)
itr = dataMap->unsafe_erase(data.first);
else
++itr;
}
关于c++ - 从 concurrent_unordered_map 中删除项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57121713/