gpt4 book ai didi

c++ - 我正在尝试使用堆解决将 k 个排序数组合并到单个数组中的问题

转载 作者:行者123 更新时间:2023-11-28 04:14:44 26 4
gpt4 key购买 nike

我正在尝试使用堆解决将 k 个排序数组合并为单个数组的问题。但我收到错误:编译失败,退出代码为 1。我不明白这是什么意思。

编译失败,退出代码为 1,编译器输出:我无法理解错误我猜优先级队列工作有问题。由于我是新手,请有人提出更改建议。

我已经尝试使用 std::pair inbuilt in STL 并且它工作正常。但是如果我在代码中定义一个类,它就不起作用

class pairr{
public:
int data;
int id;
int index;

pairr(int data,int id,int index){
this->data=data;
this->id=id;
this->index=index;
}
};


vector<int> merge(vector<vector<int>> &V){

priority_queue<pairr,vector<pairr>,greater<pairr>> q;

vector<int> out;


//creating min heap of k nodes
for(int i=0;i<V.size();i++){
pairr a(V[i][0],i,0);
q.push(a);
}

while(!q.empty()){
//minimum element
pairr cur=q.top();

// i=array of min ele j=index of array
int i=cur.id;
int j=cur.index;

//pop the element and push it in output array
q.pop();
out.push_back(cur.data);

//push new element from same array
if(j+1<V[i].size()){
pairr a(V[i][j+1],i,j+1);
q.push(a);
}

//return the output vector
return out;
}

}

int main() {
vector<vector<int>> V={{0,4,10,12},
{1,3,5,7},
{2,4,12,15,20}};

vector<int> output=merge(V);
for(int i=0;i<output.size();i++){
cout<<output[i]<<" ";
}

return 0;
}
```

最佳答案

您需要提供一种方法来比较 pairr 的两个实例.不然怎么会 std::priority_queue知道哪个pairr是比另一个优先级更高还是更低?因为你想使用 greater<pairr> , 你应该实现 operator>() .

适用于 std::pair因为std::pair实际上确实提供了各种比较运算符,operator>其中。

关于c++ - 我正在尝试使用堆解决将 k 个排序数组合并到单个数组中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56925061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com