如何在C++中修改无序映射中的每个值

How to modify every value in unordered map in c++

我在 C++ 中有一个 unordered map (umap) :

unordered_map<int, bool> dTimeResetUmap;

我将它的值设置为:

dTimeResetUmap[person.object_id] = true;

person.object_id 可以是 0, 1, 2, 3 任何整数。在代码中的某个点,我必须修改其中的所有值(基本上必须将所有值设为 false),我正在这样做,如下所示:

int size_of_dTimeResetUmap = dTimeResetUmap.size();

for (int i = 0; i <= size_of_dTimeResetUmap; i++)
{
    dTimeResetUmap[i] = false;
}

但它似乎无法发挥某些作用。在很长的 运行 代码之后,dTimeResetUmap 中的值很少,仍然是 true 而不是 false。可能是什么原因。这不是更新值的好方法吗?请帮忙谢谢。

如果您使用索引运算符 [] 访问映射中的值,而键不在映射中,则会创建一个新的键值对,默认为 "zero"值。

对于 bool 值,此 "zero" 将等于 false

因此,将所有元素设置为 false 的最简单方法是仅 remove all elements,因为所有对不存在的键的访问都将创建 false 值:

dTimeResetUmap.clear();

使用C++迭代访问地图的每个元素:

for (auto & element : dTimeResetUmap)
{
    element.second = false;
}

您可以使用 STL 迭代器;

for (auto it = umap.begin(); it != umap.end(); it++) {
  (*it).second = false;
}