2012-06-15 5 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

Смежные вопросы