2017-08-17 57 views
0
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发生变化。如何通过unordered_map迭代,但不能更改其映射值?

为什么是这种情况?

+0

你忘在for循环'为(自动米:SMAP)参考=>为(自动&M:SMAP)' – NathanOliver

+4

在'自动米:smap','M'是一个复制。如果要将更改应用于原件,则需要参考。 'auto&m:smap' – user4581301

回答

1

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

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

解决方法是正确的,但解释中的措词不好。这与'auto'和与参考相关的一切无关。 – user4581301

+0

什么会更好? “裸体汽车?” “不合格的汽车?” –

+2

“问题在于你没有在for循环中使用引用。” – user4581301