Я попытался объединить отсортированные массивы 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'