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

时间:2019-10-31 09:03:10

标签: c++ unordered-map

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

unordered_map<int, bool> dTimeResetUmap;

我将其值设置为:

dTimeResetUmap[person.object_id] = true;

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

int size_of_dTimeResetUmap = dTimeResetUmap.size();

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

但是它似乎没有任何价值。经过长时间的代码处理后,dTimeResetUmap中的值很少,而剩下的是true,而不是false。可能是什么原因。这不是更新值的好方法。请帮助谢谢。

3 个答案:

答案 0 :(得分:4)

如果您使用索引运算符[]访问映射中的值,而键不在映射中,则将创建一个新的键值对,其默认值为“零”

对于bool值,此“零”将等于false

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

dTimeResetUmap.clear();

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

您可以使用STL迭代器;

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