C++ 如何使用“创建优先级队列”;“一对中一对”;模板?

C++ 如何使用“创建优先级队列”;“一对中一对”;模板?,c++,vector,priority-queue,C++,Vector,Priority Queue,我尝试使用优先级队列将K个排序数组合并为一个排序数组。 以下是我的代码,分为两部分,“Solution.h”和主文件: 解决方案。h: #include<vector> #include<queue> vector<int> mergeKSortedArrays(vector<vector<int>*> input){ vector<int> ans; pair<i

我尝试使用优先级队列将K个排序数组合并为一个排序数组。 以下是我的代码,分为两部分,“Solution.h”和主文件:

解决方案。h:


    #include<vector>
    #include<queue>


    vector<int> mergeKSortedArrays(vector<vector<int>*> input){
      vector<int> ans;
      pair<int,pair<int,int>> p;
      priority_queue<p,vector<p>,greater<p>> pq;
      int tot_val_count=0;

      for(int i=0;i<input.size();i++){
        pq.push(make_pair(input[i][0],(i,0)));
        tot_val_count+=input[i].size();
      }
      ans.push_back(pq.top().first);
      pair<int,int> temp=pq.top().second;
      pq.pop();
      int cur_array_index=temp.first;
      int cur_val_index=temp.second;
      cur_val_index+=1;
      tot_val_count-=1;
      while(tot_val_count>0){
        if(cur_val_index<input[cur_array_index].size()){
          pq.push(input[cur_array_index][cur_val_index],(cur_array_index,cur_val_index));
          // cur_val_index+=1;
          ans.push_back(pq.top().first);
          cur_val_index=pq.top().second.second+1;
          cur_arr_index=pq.top().second.first;
          pq.pop();
        }
        else{
          cur_val_index=pq.top().second.second;
          cur_array_index=pq.top().second.first;
          pq.push(input[cur_arr_index][cur_val_index],(cur_arr_index,cur_val_index));
          cur_val_index=pq.top().second.second+1;
          cur_arr_index=pq.top().second.first;
          ans.push_back(pq.top().first);
          pq.pop();

        }
        tot_val_count-=1;
      }
      return ans;
    }


    #include <iostream>
    using namespace std;
    #include <vector>
    #include "Solution.h"

    int main() {

        int k;
        cin >> k;
        vector<vector<int>*> input;
        for(int j = 1; j <= k; j++) {
            int size;
            cin >> size;
            vector<int> *current = new vector<int>;

            for(int i = 0; i < size; i++) {
                int a;
                cin >> a;
                current -> push_back(a);
            }
            input.push_back(current);
        }


        vector<int> output = mergeKSortedArrays(input);

        for(int i = 0; i < output.size(); i++)
            cout << output[i] << " ";

        return 0;
    }


#包括
#包括
矢量合并SorteDarrays(矢量输入){
向量ans;
对p;
优先级队列pq;
int tot_val_count=0;
对于(int i=0;i0){
如果(cur_val_index>k;
矢量输入;
对于(int j=1;j>size;
矢量*当前=新矢量;
对于(int i=0;i>a;
当前->推回(a);
}
输入。推回(当前);
}
矢量输出=mergeksortedarray(输入);
对于(int i=0;icout
pair p;
也许你的意思是
在对象中使用p=pair
p
,而不是一种类型。正如@theWiseBro所说。
p
不是一种类型,优先级队列声明期望的类型,那么关于这一点呢:
priority\u queue pq;
这并没有解决问题:/