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

问题描述 投票:0回答:3

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

unordered_map<int, bool> dTimeResetUmap;

我将其值设置为:

dTimeResetUmap[person.object_id] = true;

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

int size_of_dTimeResetUmap = dTimeResetUmap.size();

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

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

c++ unordered-map
3个回答
1
投票

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

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

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

dTimeResetUmap.clear();

0
投票

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

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

0
投票

您可以使用STL迭代器;

for (auto it = umap.begin(); it != umap.end(); it++) {
  (*it).second = false;
}
© www.soinside.com 2019 - 2024. All rights reserved.