我正在尝试使用堆解决将合并的k个排序数组合并为单个数组

时间:2019-07-07 18:39:43

标签: c++ c++11 priority-queue

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

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

我尝试使用stl ::对内置在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;
}
```

1 个答案:

答案 0 :(得分:1)

您需要提供一种比较pairr的两个实例的方法。 std::priority_queue还如何知道哪个pairr的优先级比另一个高?由于要使用greater<pairr>,因此应实现operator>()

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