我创建了一个事件的优先级队列,按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()时的最低值。值未在内部排序。谢谢你让我意识到这一点。
答案 0 :(得分:2)
不需要对优先级队列进行排序。只有要求是堆属性 - 如果你调用pop()
或top()
,它必须返回top元素(给定排序函数的最低元素)。
如果您需要一个能够对元素进行排序的容器,请使用std::set
或std::map
。
答案 1 :(得分:1)
如果您需要始终排序事件,则必须sort或使用排序容器,例如set或map。 priority_queue仅保证pop()返回其中最低元素(顶部)之一。