C++ sort()函数执行后未对vector元素生效的问题排查
问题根源
你的排序操作没有作用到原始数组上:
你使用的for (auto vec : cands)遍历语法中,vec是cands中每个子vector的值拷贝,你对这个临时副本做排序,修改结果不会同步到原cands数组,所以后续读取cands生成获胜者名单时,用的还是未排序的原始数据。
修复方法
仅需要修改排序遍历的声明,将值遍历改为引用遍历即可:
将
for (auto vec : cands) {
修改为
for (auto& vec : cands) {
增加&符后,vec会直接指向cands中的原始元素,排序的修改会直接保留在原数组中。
额外优化说明(非必须)
你当前的排序逻辑存在功能冗余:你同时使用了反向迭代器rbegin()/rend()和降序比较器return x.first > y.first,二者选其一即可实现降序排序,比如可以简化为以下两种写法的任意一种:
- 正向迭代器配降序比较器:
sort(vec.begin(), vec.end(), [](pair<int, string>& x, pair<int, string>& y) { return x.first > y.first; });
- 反向迭代器配默认升序比较器:
sort(vec.rbegin(), vec.rend());
内容的提问来源于stack exchange,提问作者samar taj Shaikh
相关产品推荐
相关产品推荐

