C++ 从并发\u无序\u映射中删除ITEN列表

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"

我需要从值为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"] = 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;
}