我創建了一個事件優先級隊列,它按Event.time排序。我插入了5個事件,並且它工作得很好(它們按照Event.time的順序排序)。然而,在我彈出()之後,剩下的隊列無序(不再排序)。有人可以幫我解釋爲什麼嗎?非常感謝。在彈出後C++中的優先隊列出現故障()
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()時的最低值。這些值不會在內部排序。感謝讓我意識到這一點。
你不是爲了什麼意思?你是否試圖將所有東西都彈出來並觀察它們的順序不正確?看來你的'eventList'在'pop()'後面沒有元素。 – Haozhun
你如何查看剩餘物品的訂單?請注意,優先級隊列通常是以堆的形式實現的,即它不是在內部進行排序。 – Angew
只是一個側面說明,但通過將'operator()'聲明爲'struct'並將其定義爲'return event1.time> event2.time',可以省略一些行。當然,我想補充一下這個問題,你如何檢查,項目是不是有序。一段代碼可以再現巴哈維奇的風格。即使它有點長,當有人能夠運行它並立即檢查自己時,它是很好的。 – luk32