C++ C+中的优先级队列+;在pop()之后出现故障

C++ C+中的优先级队列+;在pop()之后出现故障,c++,priority-queue,C++,Priority Queue,我创建了一个事件优先级队列,它按Event.time排序。我插入了5个事件,效果非常好(它们是按照Event.time的顺序排序的)。但是,在I pop()之后,剩余的队列将无序(不再排序)。有人能帮我解释一下原因吗?非常感谢 struct Event { string name; int time; int pid; }; class CompareEvent { public: bool operator()(Event& event1, Event

我创建了一个事件优先级队列,它按Event.time排序。我插入了5个事件,效果非常好(它们是按照Event.time的顺序排序的)。但是,在I 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
priority\u队列事件列表;
事件新事件;
newEvent.name=eventName;
newEvent.time=时间;
newEvent.pid=pid;
eventList.push(newEvent);
eventList.pop();//其余的项目不再有序

更新的解决方案:我调试了程序,并在调试窗口中查看了事件列表值。这些值没有排序。但是,在top()时,它始终返回最低值。这些值不是内部排序的。感谢您让我意识到这一点。

如果您随时需要排序事件,您必须使用或使用类似或的排序容器。只能保证返回其中最低元素(顶部)之一。

如果您始终需要已排序的事件,则必须使用或或之类的排序容器。只能保证返回其中最低元素(顶部)之一。

如果您始终需要已排序的事件,则必须使用或或之类的排序容器。只能保证返回其中最低元素(顶部)之一。

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

优先级队列不需要排序。唯一的要求是heap属性-如果调用
pop()
top()
,它必须返回top元素(给定排序函数的最低元素)


如果需要保持元素排序的容器,请使用
std::set
std::map

优先级队列不需要排序。唯一的要求是heap属性-如果调用
pop()
top()
,它必须返回top元素(给定排序函数的最低元素)


如果需要保持元素排序的容器,请使用
std::set
std::map

优先级队列不需要排序。唯一的要求是heap属性-如果调用
pop()
top()
,它必须返回top元素(给定排序函数的最低元素)


如果需要保持元素排序的容器,请使用
std::set
std::map

优先级队列不需要排序。唯一的要求是heap属性-如果调用
pop()
top()
,它必须返回top元素(给定排序函数的最低元素)


如果您需要一个保持元素排序的容器,请使用
std::set
std::map

什么是无序?你有没有试着把所有的东西都拿出来,然后发现它们的顺序不正确?您的
eventList
似乎在
pop()之后不包含任何元素。您如何检查剩余项目的顺序?请注意,优先级队列通常以堆的形式实现,即它不是内部排序的。只是一个旁注,但您可以通过将
operator()
声明为
struct
并将其定义为
return event1.time>event2.time
来节省一些行。当然,我想补充一个问题,你如何检查,项目不符合顺序。一段复制巴哈维奥的代码就好了。即使它有点长,但任何人都可以立即运行它并检查自己,这是很好的。我调试了该程序,并在调试窗口中查看了事件列表值。这些值没有排序。但是,它总是返回最低的值。谢谢你让我意识到这一点。你说的不井然有序是什么意思?你有没有试着把所有的东西都拿出来,然后发现它们的顺序不正确?您的
eventList
似乎在
pop()之后不包含任何元素。您如何检查剩余项目的顺序?请注意,优先级队列通常以堆的形式实现,即它不是内部排序的。只是一个旁注,但您可以通过将
operator()
声明为
struct
并将其定义为
return event1.time>event2.time
来节省一些行。当然,我想补充一个问题,你如何检查,项目不符合顺序。一段复制巴哈维奥的代码就好了。即使它有点长,但任何人都可以立即运行它并检查自己,这是很好的。我调试了该程序,并在调试窗口中查看了事件列表值。这些值没有排序。但是,它总是返回最低的值。谢谢你让我意识到这一点。你说的不井然有序是什么意思?你有没有试着把所有的东西都拿出来,然后发现它们的顺序不正确?您的
eventList
似乎在
pop()之后不包含任何元素。您如何检查剩余项目的顺序?请注意,优先级队列通常以堆的形式实现,即它不是内部排序的。只是一个旁注,但您可以通过将
operator()
声明为
struct
并将其定义为
return event1.time>event2.time
来节省一些行。当然,我想补充一个问题,你如何检查,项目不符合顺序。一段复制巴哈维奥的代码就好了。即使它有点长,但任何人都可以立即运行它并检查自己,这是很好的。我调试了该程序,并在调试窗口中查看了事件列表值。这些值没有排序。但是,它总是返回最低的值。谢谢你让我意识到这一点。你说的不井然有序是什么意思?你有没有试着把所有的东西都拿出来,然后发现它们的顺序不正确?您的
eventList
似乎在
pop()之后不包含任何元素