【问题标题】:Priority queue, overloading less operation优先队列,重载少操作
【发布时间】:2012-06-18 20:46:19
【问题描述】:

我已经像这样声明了 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 &lt; rhs.m_dep_time 更改为 m_dep_time &gt; rhs.m_dep_time 并且它起作用了。我能够按预期获得最低的 dep_time。

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

你能解释一下我缺少什么吗?

【问题讨论】:

    标签: c++ operator-overloading priority-queue


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2015-02-27
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        相关资源
        最近更新 更多