【问题标题】:how come iterating through unordered_map but cannot change its mapped value? [duplicate]为什么迭代 unordered_map 但不能更改其映射值? [复制]
【发布时间】:2018-01-26 08:12:30
【问题描述】:
pair<bool, char> pos_panlindrome(unordered_map<char, int>& smap){
    for(auto m : smap){
        m.second /= 2;
   }
}

我在另一个调用 pos_panlindrome 的函数中声明了 smap。我希望将所有映射值(尽管有键值)减半。但不知何故,当我在 pos_panlindrome 函数之后打印出 smap 时,mapped_value 都没有改变。

为什么会这样?

【问题讨论】:

  • 您忘记了 for 循环中的引用 for(auto m : smap) =&gt; for(auto&amp; m : smap)
  • auto m : smapm 是一个副本。如果更改要应用于原件,您需要参考。 auto &amp; m : smap

标签: c++


【解决方案1】:

问题是您在 for 循环中使用了未经修改的 auto。这将创建每个地图元素的副本,然后您修改该副本。如果要更改地图中的条目,则需要参考。试试这个:

for (auto& m : smap)
{
  m.second /= 2;
}

【讨论】:

  • 解决方案是正确的,但解释中的措辞不好。这与auto 无关,与参考无关。
  • 什么会更好? “裸车?” “不合格的汽车?”
  • “问题是你没有在你的 for 循环中使用引用。”
  • 评论和闭包比答案更适合这个问题。
  • @SergeyA 或标记为骗子
猜你喜欢
  • 1970-01-01
  • 2017-02-09
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多