为什么地图值不更新?

问题描述

我的代码中有这个免费功能

void changeRanks(int n,map<int,double>& id_rank_map)
{
  cout << "n : " << n << endl;
  
  for(auto itr : id_rank_map)
  {
    itr.second = double(1) / double(n);
  }
}

我已经验证了 'n' 不是 0,但即使在从 'main' 函数访问时,'id_rank_map' 中的每个值仍然是 0.00,即使在 for 循环内的行执行之后也是如此。

我该如何更新?

解决方法

当使用基于范围的 for 循环时,: 左边的变量不是迭代器,而是值本身:

for(auto v : id_rank_map)

拼写:

for(std::pair<const int,double> v : id_rank_map)

这样写,现在很明显,在每次迭代中,都会创建一个值的副本,然后修改,然后丢弃。将其改为引用,避免复制,并修改容器中存储的值:

for(std::pair<const int,double>& v : id_rank_map)
// or
for(auto& v : id_rank_map)