2017-11-08 24 views
0

나는이 leetcode question을보고 벡터 (O (nk) 대신 O (nlogk)) 대신 우선 순위 큐를 사용하여 문제를 해결하려고했습니다. 어떻게 이동합니까? 기본 벡터로 priority_queue를 초기 컨테이너로 초기화합니까? 이것은 시도한 것이지만 컴파일되지 않기 때문에 분명히 docs을 오해하고 있습니다.벡터에서 priority_queue를 이동 초기화 하시겠습니까?

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); 
    } 
}; 
+1

일반적으로 컴파일되지 않는 코드가있는 경우 컴파일 오류를 게시물에 추가하는 것이 좋습니다. 보너스는 다른 컴파일러 (예 : gcc 및 clang)로 시도하고 두 오류를 게시하는 경우를 가리 킵니다. –

답변

1

priority_queue<ListNode*, vector<ListNode*>, cmp> pq{ cmp{}, std::move(lists) }; 

을 찾으셨습니까? 기본적으로 비교 자이 std::less<typename Container::value_type> (그래서 당신은 명시 적으로 템플릿 인수에 cmp를 작성해야)하고 있기 때문에

코드는 인수가 cmp의 인스턴스 (안 클래스가하기 때문에, 실제로 수업이없는 일류 시민이 실패 C++에서는 인수로 전달할 수 없습니다).