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
相关产品推荐
相关产品推荐

