为 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.
我在做这个问题,我们需要在单个数组中对 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.