优先级队列,重载较少的操作

时间:2012-06-15 18:42:31

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

我已经像这样声明了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来从队列中以递增顺序获取元素,首先是最低值。

你能解释我错过的东西吗?

3 个答案:

答案 0 :(得分:2)

查看此reference。默认情况下,top元素是最大的元素。如果你想要相反的行为,你必须使用不同的比较功能,就像你做的那样。

答案 1 :(得分:1)

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

答案 2 :(得分:0)