【问题标题】:Removing list of itens from concurrent_unordered_map从 concurrent_unordered_map 中删除项目列表
【发布时间】:2019-07-20 04:05:06
【问题描述】:

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

【问题讨论】:

    标签: c++ concurrency


    【解决方案1】:

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

    unsafe_erase 将迭代器返回到已擦除项之后的第一项(或 end,如果已擦除是最后一项)。

    所以你可以写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-20
      • 2016-05-08
      • 2011-03-18
      • 2020-12-07
      • 2010-11-29
      • 2016-08-17
      • 2019-09-30
      相关资源
      最近更新 更多