2012-06-15 30 views
0

我已經聲明std :: priority_queue這樣。優先級隊列,超載較少的操作

priority_queue < Aircraft, vector<Aircraft>, less<Aircraft> > *q; 

我重載了這麼少的運算符。

bool Aircraft::operator<(const Aircraft &rhs) const 
{ 
    return (m_dep_time < rhs.m_dep_time); 
} 

我打印出優先級隊列,並且我以遞減順序(最大的dep_time首先)獲取元素。我不得不將m_dep_time < rhs.m_dep_time更改爲m_dep_time > rhs.m_dep_time,它工作。我能夠按照我的意圖獲得最低的dep_time。

我認爲在邏輯上使用m_dep_time < rhs.m_dep_time是正確的,而不是m_dep_time > rhs.m_dep_time以增加的順序從隊列中獲取元素,最低的價值第一。

你能解釋一下我失蹤了嗎?

在此先感謝。

回答

2

檢查此reference。默認情況下,頂層元素是最大的元素。如果你想要相反的行爲,你必須使用不同的比較函數,就像你所做的一樣。

1

隊列中的<描述了優先級爲的關係較少的關係。因此,如果您希望具有最低時間值的元素成爲第一個(最高優先級),則必須將時間比較爲m_dep_time > rhs.m_dep_time