如何更新std::map中的所有值?解决循环赋值无效问题
问题原因及解决方法
你这段代码没生效的核心原因是:range-based for循环里的auto i是map元素的拷贝副本,你修改的只是这个临时副本的second值,原map里的元素根本没被改动。
正确实现方式
方式一:使用引用遍历(推荐,C++11及以上)
把循环变量改成引用类型,直接操作原map中的元素:
for(auto& i : m) { i.second = a; }
这里的auto&表示绑定map里的原始键值对,修改i.second就是直接修改原容器内的对应值。
方式二:使用迭代器遍历(兼容旧标准)
如果需要兼容C++98等旧版本,可以用迭代器遍历修改:
for(std::map<char, int>::iterator it = m.begin(); it != m.end(); ++it) { it->second = a; }
迭代器it指向map中的实际元素,通过it->second可以直接修改原元素的值。
修改后再遍历map,所有元素的second值都会变成20,符合你的需求。
内容的提问来源于stack exchange,提问作者Saif Alvi
相关产品推荐
相关产品推荐

