我已经像这样声明了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
来从队列中以递增顺序获取元素,首先是最低值。
你能解释我错过的东西吗?
答案 0 :(得分:2)
查看此reference。默认情况下,top元素是最大的元素。如果你想要相反的行为,你必须使用不同的比较功能,就像你做的那样。
答案 1 :(得分:1)
队列中的<
描述优先级上的关系。因此,如果您希望具有最低时间值的元素成为第一个(最高优先级),则必须将时间与m_dep_time > rhs.m_dep_time
进行比较
答案 2 :(得分:0)