C++ 如何使用“创建优先级队列”;“一对中一对”;模板?
我尝试使用优先级队列将K个排序数组合并为一个排序数组。 以下是我的代码,分为两部分,“Solution.h”和主文件: 解决方案。h: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
#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;i coutpair p;
也许你的意思是在对象中使用p=pair
p
,而不是一种类型。正如@theWiseBro所说。p
不是一种类型,优先级队列声明期望的类型,那么关于这一点呢:priority\u queue pq;
这并没有解决问题:/