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

C++编译报错:invalid initialization of reference pair问题求助

编译错误原因与修复方案

错误根源

你遇到的编译错误是因为比较函数的参数类型不符合C++标准库算法的要求:

  • std::sort在内部执行排序逻辑时,会向比较函数传递const修饰的元素引用,但你的cmp函数参数定义为std::pair<int, int>&(非const左值引用),C++标准不允许将const对象绑定到非const引用上,因此GCC 4.8(刷题网站使用的编译器)直接报错。
  • Visual Studio编译器默认启用了语言扩展,允许这种非标准的写法通过编译,但这属于编译器的特殊处理,并不符合C++标准。

修复方法

只需要将cmp函数的参数改为const引用即可,修改后的代码如下:

bool cmp(const std::pair<int, int>& a, const std::pair<int, int>& b) {
    if (c == '+') {
        return a.second < b.second;
    }
    else {
        return a.second > b.second;
    }
}

额外优化建议(可选)

为了让代码更规范、减少潜在问题,还可以做以下调整:

  • 将全局变量map、n、m、c改为main函数内的局部变量,再通过参数传递给Sort函数,避免全局变量带来的耦合性和线程安全问题
  • 使用C++11及以上的范围for循环简化遍历逻辑,比如遍历map填充vector的部分可以改为:
    for (const auto& pair : M) {
        v.push_back(pair);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:48:14