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

Creating a STL min heap 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,但结果相同。

希望您能理解我的问题,在此先感谢您。

您必须使用 greater,因为 priority_queue 先取 最大的

所以将您的比较更改为

return b.m_time < a.m_time;