优先级队列不适用于compare()

时间:2011-12-01 06:26:10

标签: c++ algorithm data-structures heap priority-queue

我设计了一个优先级队列,但它不适用于某些测试用例。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

template <class T1, class T2>
class priorityQueue {
private:
    vector<T1> dataContainer;

    class Compare {
    public:
    // Compare two elements .
        bool operator()(const T1& a, const T1& b) const {
        return a > b;
    }
    };

public:
    priorityQueue(vector<T1>& myV) : dataContainer(myV) {    
        make_heap(dataContainer.begin(), dataContainer.end(), Compare());
    }

    bool empty() const { return dataContainer.empty(); }
    // get the size of the queue 
    size_t size() const { return dataContainer.size(); }
    // get the element with the highest priority in the queue
    T1& top(){ return dataContainer.front();}
    // push an element into the qeueu 
    void enQueue(T1& element) {
        dataContainer.push_back(element);
        push_heap(dataContainer.begin(), dataContainer.end(), Compare());
    }
    // pop the element with the highest priority in the qeueu 
    void deQueue() {
        pop_heap(dataContainer.begin(), dataContainer.end(), Compare());
        dataContainer.erase(dataContainer.begin());
    }
    void printQ() {
        typename vector<T1>::iterator itr ; 
        cout << "the priorityQueue is : " << endl ;   
        for (itr = dataContainer.begin(); itr != dataContainer.end(); ++itr) {
            cout << *itr << "\t"; 
        }
        cout << endl ;      
    }
};

int main() {
    vector<int> aa;
    int a[4] = {5, 8, 3, 2};
    aa.assign(a, a+4);
    priorityQueue<int, bool> myQ(aa);  
    myQ.printQ(); 

    return 0; 
}

比较类不能更改优先级排序。

a > b的输出应为2 3 5 8


更新问题已解决,谢谢

1 个答案:

答案 0 :(得分:3)

dequeue()操作中,您必须删除 last 元素:

 void deQueue()
 {
       pop_heap(dataContainer.begin(), dataContainer.end(), Compare());
       dataContainer.pop_back();
 }