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_timeする必要がm_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 に答える