我需要从我的current_unordered_map中删除所有值为真的项目
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
答案 0 :(得分:2)
您不能在迭代器上使用++
来删除元素。访问已删除的对象会导致不确定的行为。
unsafe_erase
将迭代器返回到已删除的第一个项目(如果删除的是最后一个,则返回end
)。
所以您可以写:
while (itr != dataMap->end())
{
auto data = (*itr);
if (data.second == true)
itr = dataMap->unsafe_erase(data.first);
else
++itr;
}