c++ - 从 concurrent_unordered_map 中删除项目列表

标签 c++ concurrency

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

最佳答案

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

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

所以你可以这样写:

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

关于c++ - 从 concurrent_unordered_map 中删除项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57121713/

相关文章:

c++ - 如何实现原子(线程安全)和异常安全的深拷贝赋值运算符?

c++ - : Bit, byte 和 int 哪个更有效?

go - 简单并发

concurrency - Grunt Concurrent 不能运行太多任务

c++ - 检查传递给 Node C++ 插件的参数是 Infinity 还是 NaN

c++ - Apache C++ 模块持久全局对象

c++ - 尝试将文本文件加载到动态分配的二维数组时出现 bad_array_new_length 错误

linux - 在单核机器上测试并行程序的性能

java - 如何在并发客户端之间广播消息?

c++ - 在 Linux 上是否有等效的 Windows concurrency_queue.h?