13

私はこのようなことをしたいと思っています:

priority_queue< pair<int, int>, vector<int>, greater<int> > Q;

比較しているタイプが の場合、これは正常に機能しますint

priority_queue< int, vector<int>, greater<int> > Q;

ただし、明らかに のpair<int, int>場合、キュー内のペアを標準の と比較する方法はありません>。私はどうしたらいいのだろう?オーバーロードをどのように実装しますか、>またはキューの一番上にある最小のペアの優先キューを作成できる別の方法はありpair.secondますか?

4

2 に答える 2

25

これを試しましたか?

typedef pair<int, int> P;
priority_queue< P, vector<P>, greater<P> > Q;

operator<これにより、通常のの逆の順序が与えられます。これは、最小の でタイブレークさpair<int, int>れた最小のものから始まります。firstsecond

second最小の 1 番目と2 番目 (!) で並べ替えたい場合firstは、新しい並べ替えファンクターが必要になります。

struct Order
{
    bool operator()(P const& a, P const& b) const
    {
        return a.second < b.second || a.second == b.second && a.first < b.first;
    }
}

次に使用します。

priority_queue< P, vector<P>, Order > Q;
于 2012-05-26T10:54:45.260 に答える
1

pair<int, int>私が見る限り、ここで使用するのではなく、独自のドメイン クラスを作成する必要があります。その後>、好きなようにオーバーロードできます。

于 2012-05-26T10:54:21.660 に答える