You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么对Map中迭代器关联的vector执行排序操作不生效?

问题原因

你代码中的范围for循环采用了值传递的方式遍历map元素:
for(auto g: values)
这里的g是map中每个pair<int, vector<int>>元素的临时拷贝,你对g.second执行排序操作,修改的只是临时副本的内容,完全不会写入到原mapvalues的存储数据中,所以最后打印的时候还是排序前的原始值。

修复方案

只需要将循环变量修改为引用类型,直接操作原map中的元素即可:

map<int, vector<int> > values;
values[1] = {3,1,2,4,5};
// 加&获取原元素的引用,修改会直接作用到原map上
for(auto& g: values) {
    sort(g.second.begin(), g.second.end());
}
for(int i=0;i<values[1].size();i++) {
    cout<<values[1][i]<<" ";
}

运行后输出结果为1 2 3 4 5,符合预期。

额外建议

日常遍历容器时,如果不需要修改元素,建议使用const auto&的方式遍历,既能避免不必要的拷贝开销,也能防止误改数据;需要修改元素时就用非const的引用即可。


内容的提问来源于stack exchange,提问作者2997ms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:04