2017-10-03 11 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 と同じタイプではありません' PRIORITY_QUEUE '' – Kevin

+0

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

あなたは、参照を使用する必要があります。元のコレクションを変更する必要があるからです。

関連する問題