gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:15:20 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com