2012-03-19 14 views
0

クラスThingを保持する3つの異なるpriority_queueを作成し、それぞれをThingが保持する値で別々にソートしたいとします。私はオペレータメソッドを内部的に、またはオブジェクトの友人のどちらかに定義できますが、別のテストメソッドを使用する方法はありますか?演算子メソッドの代わりにそのメソッドを使用するように指示するにはどうすればよいですか?そして、パラメータリストとオペレータ過負荷の作成方法はどのように異なるでしょうか?std :: priority_queue異なる比較

答えて

2

ほとんどのSTLコンテナと同様に、priority_queueCompare class in its template argumentsを受け入れます。

struct MyCompare1 { 
    bool operator()(const Thing& t1, const Thing& t2) { 
    // your logic here 
    } 
}; 

std::priority_queue<Thing, std::vector<Thing>, MyCompare1> my_queue; 
+0

どのようにこれを前に記述しますか? – gardian06

+0

このメソッドは独自のクラス/構造体でなければならないか、メンバ関数<同様にメンバ関数<(const Thing&_t2)と同じようにすることができます。 – gardian06

+0

ビジュアルスタジオは、オペレータは非静的でなければならず、オペレータを定義する必要があります。 – gardian06

0

デフォルトの代わりに使用されるカスタムコンパレータタイプを渡すことができます。これはpriority_queueのテンプレートパラメータです。

+0

どのようにこれを前書きしますか。これを説明するいくつかの文書を指してもいいですか(書く、使用する) – gardian06

0

priority_queueを定義するときに、3番目のパラメータとして比較関数を指定できます。 2番目のパラメータは基になるコンテナのタイプで、通常はstd::vectorです。

std::priority_queue<Thing> pq1; 
std::priority_queue<Thing, std::vector<Thing>, std::greater<Thing> > pq2; 
std::priority_queue<Thing, std::vector<Thing>, [your comparator here] > pq3; 
関連する問題