0

私の問題は:

  • 私は2つのクラスとメインのプログラムを持っています。

  • クラスのメンバー関数内でpriority_queueを宣言しました。

  • 比較を定義する必要があり、使用する必要があるコードは次のとおりです。

    // Determine priority (in the priority queue)
    bool operator < (const node & a, const node & b)
    {
      return a.getPriority() > b.getPriority();
    }
    

質問:このコードをどこに挿入すればよいですか?誰かが私を助けてもらえますか?

ありがとう

4

2 に答える 2

1

operator<に追加するのはおそらく不十分なようnodeです。自問してみてください:ノードは論理的に比較可能ですか?(priorty_queueのコンテキスト外で)ノードを比較することで、それらの優先度を比較する必要があることは明らかですか?多分それは彼らの位置、または彼らが含むかもしれない他のものを比較するべきです。を指定する場合operator<は、他の5つの比較演算子を使用することも意味があります。node < node実際に何を比較するかが明確でない場合はoperator<、ノードにforを提供しないでください。このような場合は、カスタム比較機能を提供することをお勧めしpriority_queueます...

struct NodeComparer
{
    bool operator()(const node& left, const node& right)
    {
        return left.GetPriority() > right.GetPriority();
    }
}

..。

std::priority_queue<node, std::vector<node>, NodeComparer> nodeQueue;

このようにしてpriority_queue、希望どおりに機能できますが、に非論理的な機能を追加することはありませんnode

于 2013-02-20T14:14:09.723 に答える
0

この演算子は、priority_queueが宣言されている場所に表示される必要があります。.cpp優先キューはメンバーにのみ存在するため、メソッドを実装するファイルで、指定されたメソッド定義のすぐ上にオペレーターの定義を配置します。

于 2013-02-20T13:57:23.170 に答える