为 K 排序数组问题编译此代码时出错

Got an error while compiling this code for K sorted array problem

我在做这个问题,我们需要在单个数组中对 k 个排序数组进行排序,编译器抛出错误:

"prog.cpp:20:23: 错误:预期 ) 在 & 令牌之前 struct mycomp(triplet &t1, triplet &t2){"

我是初学者,谁能帮助我了解问题所在。

`` 代码```

struct triplet{
    int val; int apos; int valpos;
};
struct mycomp(triplet &t1 , triplet &t2){
    bool operator(triplet &t1 , triplet &t2){
        return t1.val<t2.val;
}
};

class Solution
{
    public:
    //Function to merge k sorted arrays.
    vector<int> mergeKArrays(vector<vector<int>> arr, int K)
    {
        //code here
        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_back(t);
        }
        
       while(pq.empty()==false){
               triplet t = pq.top(); pq.top();
               v.push_back(t.val);
               int ap == curr.apos; int vp = curr.valpos;
               if(vp+1<arr[ap].size()){
                   triplet t = (arr[ap][vp+1] , ap , vp+1);
                   pq.push(t);
               }
           }
       
    
    return v;
    }
    
};

您给定的程序中还有许多其他 errors/mistakes。你提到的那个是因为 mycomp 是一个结构,所以在编写它的定义时你不能将参数传递给它(因为它不是函数定义)。可以通过将 mycomp 定义更改为:

来修复此特定错误
//mycomp is  a struct and not a function so don't pass parameters
struct mycomp{
    bool operator()(triplet &t1 , triplet &t2)//note the parenthesis () i have added to overload operator()
    {
        return t1.val<t2.val;
    }
};

另外如何正确使用std::priority_queue可以参考this.