Ich sah dies leetcode question und wollte es mit einer Prioritätswarteschlange anstelle eines Vektors (also O (nlogk) anstelle von O (nk)) lösen. Wie verschiebe ich die priority_queue mit dem angegebenen Vektor als zugrunde liegenden Container? Dies ist, was ich versucht habe, aber ich habe eindeutig die docs missverstanden, weil es nicht kompilieren wird.Move-initialisiert eine priority_queue von einem Vektor?
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class cmp{
public:
bool operator()(const ListNode *a,const ListNode *b) const {
if(b==nullptr) return false;
return a==nullptr || a->val>b->val;
}
};
class Solution {
ListNode* helper(auto& lists) {
ListNode *ans=lists.top();lists.pop();
if(ans==nullptr) return nullptr;
lists.push(ans->next);
ans->next=helper(lists);
return ans;
}
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.empty()) return nullptr;
priority_queue<ListNode*,vector<ListNode*>> pq(cmp,std::move(lists)); //compiler says error: 'std::move' is not a type
return helper(pq);
}
};
Wenn Sie Code haben, der nicht kompiliert wird, empfiehlt es sich normalerweise, den Kompilierungsfehler dem Post hinzuzufügen. Bonuspunkte, wenn Sie mit verschiedenen Compilern (zB gcc und clang) versuchen und beide Fehler posten. –