我在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
。可能是什么原因。这不是更新值的好方法。请帮助谢谢。
答案 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;
}