Как сделать приоритетную очередь с шаблоном «пара в паре»? - PullRequest
0 голосов
/ 18 марта 2020

Я попытался объединить отсортированные массивы K в один отсортированный массив, используя приоритетные очереди. Вот мой код из двух частей: «Solution.h» и основной файл:

Solution.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;
    }

Мои логики c кажутся правильными, когда я dry запускаю этот код ... но я получаю ошибку, когда помещаю шаблон "p" в "priority_queue".

Пожалуйста, помогите мне, как удалить эту ошибку и как использовать пару в шаблоне пары в priority_queue !!!

Ошибка:

Ошибка: значение 'p' не может использоваться в константном выражении priority_queue, больше

примечание: 'p' не было объявлено пара 'constexpr'> p;

несоответствие типа / значения в аргументе 1 в параметре шаблона список для 'шаблона класса std :: vector'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...