2017-10-03 14 views
0

저는 C++의 초보자입니다. maxheap 및 minheap std :: priority_queue 사용하여 만들려고합니다. maxheap을 만드는 것은 잘 작동하지만 둘 다 작동하지는 않습니다. 나는 그 오류를 이해하는 것처럼 보일 수 없다. 다음 오류가 나타납니다. 'minHeap'을 'std :: priority_queue, compare>'에서 'std :: priority_queue'로 변환 할 수 없습니다. 인터넷 검색을 시도했지만 아무 소용이 없습니다. 아래는 코드입니다.오류 : 'minHeap'을 'std :: priority_queue, std :: greater>'에서 'std :: priority_queue'로 변환 할 수 없습니다.

void addNum(int num, priority_queue<int> maxHeap, priority_queue<int> minHeap) { 
    if (minHeap.size() == 0 || num > minHeap.top()) 
     minHeap.push(num); 
    else if (num < minHeap.top()) 
     maxHeap.push(num); 
} 

void createHeaps(vector<int> a) { 
    priority_queue<int> maxHeap; 
    priority_queue<int, vector<int>, greater<int> > minHeap; 
    for (int i = 0; i < a.size(); ++i) { 
     int num = a[i]; 
     addNum(num, maxHeap, minHeap); 
    } 
} 
+0

앞에'priority_queue , 큰> '이 아닌'priority_queue Kevin

+0

''priority_queue , 큰> '동일한 타입이 아닌''보다 priority_queue ... – Jarod42

답변

1

당신은 너무 당신의 방법에 대한 올바른 유형을 사용할 수 있습니다

void addNum(int num, 
      priority_queue<int, >& maxHeap, 
      priority_queue<int, std::vector<int>, std::greater<int>>& minHeap) { 
    if (minHeap.size() == 0 || num > minHeap.top()) 
     minHeap.push(num); 
    else if (num < minHeap.top()) 
     maxHeap.push(num); 
} 

을 또는 당신은 단순히,

template <typename ... Ts1, typename ... Ts2> 
void addNum(int num, 
      priority_queue<int, Ts1...>& maxHeap, 
      priority_queue<int, Ts2...>& minHeap) { 
    if (minHeap.size() == 0 || num > minHeap.top()) 
     minHeap.push(num); 
    else if (num < minHeap.top()) 
     maxHeap.push(num); 
} 

또는보다 일반적으로 당신의 방법을 템플릿 수 있습니다

template <typename PriorityQueue1, typename PriorityQueue2> 
void addNum(int num, 
      PriorityQueue1& maxHeap, 
      PriorityQueue2& minHeap) { 
    if (minHeap.size() == 0 || num > minHeap.top()) 
     minHeap.push(num); 
    else if (num < minHeap.top()) 
     maxHeap.push(num); 
} 
2

시도 중입니다. priority_queue<int, vector<int>, greater<int> > 유형의 변수를 전달하지만 함수에 priority_queue<int> 유형이 필요합니다.

void addNum(int num, priority_queue<int>& maxHeap, priority_queue<int, vector<int>, greater<int> >& minHeap) { 
    if (minHeap.size() == 0 || num > minHeap.top()) 
     minHeap.push(num); 
    else if (num < minHeap.top()) 
     maxHeap.push(num); 
} 

당신은 참조를 사용해야합니다

는 함수의 프로토 타입을 수정합니다. 원래 컬렉션을 수정해야하기 때문입니다.