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

C++合并k个有序数组代码报expected ) before & token编译错误求助

错误排查与修复代码

你代码里存在多处语法错误和逻辑错误,全部修复点如下:

  • 比较器mycomp定义语法错误:C++仿函数结构体定义不需要在结构体名后带参数列表,重载的调用运算符名称必须是operator(),同时为了符合优先队列的使用要求,参数需加const修饰,函数本身也要加const限定。另外优先队列默认是大顶堆,要实现每次取最小元素的小顶堆,比较逻辑需要返回t1.val > t2.val。
  • 优先队列定义语法错误:最后一个模板参数的闭合括号应该是尖括号>,不是圆括号)。
  • 变量大小写不匹配:函数形参是大写K,循环条件中错误写为小写k。
  • 语句缺少分号:结构体初始化语句末尾漏写分号。
  • 优先队列方法调用错误:priority_queue没有push_back方法,插入元素要调用push方法。
  • 堆顶元素弹出逻辑错误:调用pq.top()仅能获取堆顶元素,删除堆顶需要调用pq.pop()。
  • 赋值运算符误用+未定义变量引用:==是比较运算符,赋值需要用=;你之前提取的堆顶元素存在变量t中,不存在名为curr的变量。
  • 结构体初始化语法错误:聚合初始化需要用花括号{},不能用圆括号()。

修复后的完整可运行代码如下:

#include <vector>
#include <queue>
using namespace std;

struct triplet{
    int val; int apos; int valpos;
};
struct mycomp{
    bool operator()(const triplet &t1 , const triplet &t2) const {
        // 小顶堆需要返回大于关系
        return t1.val > t2.val;
    }
};

class Solution
{
    public:
    //Function to merge k sorted arrays.
    vector<int> mergeKArrays(vector<vector<int>> arr, int K)
    {
        vector<int> v;
        priority_queue<triplet , vector<triplet> ,mycomp> pq;
        
        for(int i=0; i<K; i++){
            triplet t = {arr[i][0] , i ,0};
            pq.push(t);
        }
        
       while(pq.empty()==false){
               triplet t = pq.top(); 
               pq.pop();
               v.push_back(t.val);
               int ap = t.apos; 
               int vp = t.valpos;
               if(vp+1 < arr[ap].size()){
                   triplet next_t = {arr[ap][vp+1], ap, vp+1};
                   pq.push(next_t);
               }
           }
        
        return v;
    }
    
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:27:01