创建STL最小堆优先级队列?

时间:2015-11-26 10:02:36

标签: c++ stl priority-queue

我的任务是实现一个最小堆优先级队列,用m_time成员变量对每个队列对象进行排序。 我的问题是我无法管理队列以先排序最小而不是最大。

我在.h文件中有一个名为Event的结构,它包含三个变量:

struct Event
{ 
 Event(int time=-1, int grind=-1, bool val=false) 
 { m_time=time;m_grindNr=grind; m_value=val;}

    int  m_time;
    int  m_grindNr;
    bool m_value;
};

以下代码是.cpp文件中的内容:

struct compare
{
    bool operator()(const Event& a, const Event& b)
    {
        return a.m_time < b.m_time;
    }
};


void main()
{
    priority_queue <Event,vector<Event>, compare> Que;

    Event firstEvent;
    firstEvent.m_time = 2;
    firstEvent.m_grindNr = 0;
    firstEvent.m_value = 0;
    Que.push(firstEvent);

    Event secondEvent;
    secondEvent.m_time = 5;
    secondEvent.m_grindNr = 0;
    secondEvent.m_value = 0;
    Que.push(secondEvent);

    Event tempEvent = Que.top(); //Takes the top value
    Que.pop();
    cout << tempEvent.m_time << " "; //Should print number 2, but prints 5

    tempEvent = Que.top(); //Takes the top value
    Que.pop();
    cout << tempEvent.m_time << endl; //Should print number 5, but prints 2
}

我也尝试在优先级队列参数中使用std :: less,但结果相同。

我希望你提前了解我的问题。

1 个答案:

答案 0 :(得分:0)

您必须首先使用greater作为priority_queue 最大

所以将你的比较改为

return b.m_time < a.m_time;