【发布时间】:2017-11-08 22:16:22
【问题描述】:
我看到了这个leetcode question 并想用优先级队列而不是向量来解决它(因此 O(nlogk) 而不是 O(nk))。如何使用给定的向量作为底层容器移动初始化 priority_queue?这是我尝试过的,但我显然误解了docs,因为它不会编译。
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);
}
};
【问题讨论】:
-
通常,当您有无法编译的代码时,最好将编译错误添加到帖子中。如果您尝试使用不同的编译器(例如 gcc 和 clang)并同时发布两个错误,则可以加分。
标签: c++ move-semantics