1

我已经像这样声明了 std::priority_queue 。

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

我像这样重载了 less 运算符。

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

我打印出优先级队列,并且按降序获取元素(最大的 dep_time 首先)。我不得不改变m_dep_time < rhs.m_dep_timem_dep_time > rhs.m_dep_time并且它起作用了。我能够按预期获得最低的 dep_time。

我认为在逻辑上使用m_dep_time < rhs.m_dep_time是正确的,而不是按m_dep_time > rhs.m_dep_time升序从队列中获取元素,最低值在前。

你能解释一下我错过了什么吗?

4

3 回答 3

3

看看这个参考。默认情况下,顶部元素是最大的元素。如果你想要相反的行为,你必须使用不同的比较函数,就像你所做的那样。

于 2012-06-15T18:46:52.713 回答
1

<队列中的 描述了优先级上的较少关系。因此,如果您希望时间值最低的元素成为第一个(最高优先级),则必须将时间比较为m_dep_time > rhs.m_dep_time

于 2012-06-15T18:46:40.790 回答
0

优先队列的设计使其第一个元素始终是其包含的最大元素。

于 2012-06-15T18:47:21.447 回答