我正在尝试使用堆解决将 k 个排序数组合并到单个数组中的问题
I am trying to solve merge k sorted arrays into a single array using heap
我正在尝试使用堆解决将 k 个排序数组合并为单个数组的问题。
但我收到错误:编译失败,退出代码 1.I 不明白这是什么意思。
编译失败,退出代码为 1,编译器输出:
我无法理解错误
我猜优先级队列工作有问题。
由于我是新手,请有人提出更改建议。
我试过使用 std:: pair inbuilt in stl 并且它工作得很好。
但是如果我在代码中定义一个 class 它就不起作用
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>
。
我正在尝试使用堆解决将 k 个排序数组合并为单个数组的问题。 但我收到错误:编译失败,退出代码 1.I 不明白这是什么意思。
编译失败,退出代码为 1,编译器输出: 我无法理解错误 我猜优先级队列工作有问题。 由于我是新手,请有人提出更改建议。
我试过使用 std:: pair inbuilt in stl 并且它工作得很好。 但是如果我在代码中定义一个 class 它就不起作用
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>
。