问题描述
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)