如何在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;
}
我在 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;
}