从parallel_unordered_map中删除itens列表

时间:2019-07-20 04:05:06

标签: c++ concurrency

我需要从我的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

1 个答案:

答案 0 :(得分:2)

您不能在迭代器上使用++来删除元素。访问已删除的对象会导致不确定的行为。

unsafe_erase将迭代器返回到已删除的第一个项目(如果删除的是最后一个,则返回end)。

所以您可以写:

while (itr != dataMap->end())
{
    auto data = (*itr);
    if (data.second == true)
        itr = dataMap->unsafe_erase(data.first);
    else
        ++itr;
}