pop()之后C ++中的优先级队列乱序

时间:2014-02-13 08:02:12

标签: c++ priority-queue

我创建了一个事件的优先级队列,按Event.time排序。我插入了5个事件并且它工作得很好(它们按Event.time的顺序排序)。但是,在pop()之后,剩余的队列出现故障(不再排序)。有人可以帮我解释一下原因吗?非常感谢。

struct Event
{
    string name;
    int time;
    int pid;
};

class CompareEvent
{
public:
    bool operator()(Event& event1, Event& event2)
    {
        if (event1.time > event2.time)
            return true;

        return false;
    }
};

主要班级

priority_queue<Event, vector<Event>, CompareEvent> eventList;

    Event newEvent;
    newEvent.name = eventName;
    newEvent.time = time;
    newEvent.pid = pid;

eventList.push(newEvent);

eventList.pop(); // the remaining items are not in order anymore

更新的解决方案:我调试了程序,并在调试窗口中查看了eventList值。值未排序。但是,它总是返回top()时的最低值。值未在内部排序。谢谢你让我意识到这一点。

2 个答案:

答案 0 :(得分:2)

不需要对优先级队列进行排序。只有要求是堆属性 - 如果你调用pop()top(),它必须返回top元素(给定排序函数的最低元素)。

如果您需要一个能够对元素进行排序的容器,请使用std::setstd::map

答案 1 :(得分:1)

如果您需要始终排序事件,则必须sort或使用排序容器,例如setmappriority_queue仅保证pop()返回其中最低元素(顶部)之一。