C++ 从并发\u无序\u映射中删除ITEN列表
我需要从值为true的并发\u无序\u映射中删除所有项C++ 从并发\u无序\u映射中删除ITEN列表,c++,concurrency,C++,Concurrency,我需要从值为true的并发\u无序\u映射中删除所有项 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"
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;
那么,如何正确地移除这些项目呢
编辑:
我使用的是VC++2019您不能在迭代器上使用
++
来擦除元素。访问已删除的对象会导致未定义的行为
unsafe_erase
将迭代器返回到已擦除项之后的第一项(如果已擦除项是最后一项,则返回end
)
所以你可以写:
while (itr != dataMap->end())
{
auto data = (*itr);
if (data.second == true)
itr = dataMap->unsafe_erase(data.first);
else
++itr;
}
while (itr != dataMap->end())
{
auto data = (*itr);
if (data.second == true)
itr = dataMap->unsafe_erase(data.first);
else
++itr;
}