1

私は

pair<int, pair<int, string> >. 

これを C++ の STL セットに挿入します。最初の値でソートされたセットを保持します。しかし、最初の値が他の値と同じペアを挿入する場合、これを 2 番目の値が大きい順に並べ替える必要があります。わかりやすくするために例を挙げます。

#define pii pair<int, string>
#define pint pair< int , pii >
set< pint > S;
set< pint >::iterator it;
S.insert(make_pair(100, make_pair(1, "hi")));
S.insert(make_pair(50, make_pair(2, "hello")));
it = S.begin();
cout << it->second.second;

ここで私が得る出力は

hello

でも、もしそうなら、

S.insert(make_pair(50, make_pair(3, "dude")));
it = S.begin();
cout << it->second.second

ここでも出力は

hello

しかし、出力を

dude

最初の値 (50) は "hi" の最初の値 (100) よりも小さく、"hello" の最初の値 (50) と等しいためです。ただし、2 番目の値 (3) は、"hi" の 2 番目の値 (1) よりも大きく、"hello" の 2 番目の値よりも大きくなっています。

ありがとうございました。

したがって、最初の値が同じである場合は、2 番目の値に従ってソートする必要がありますが、最初に 2 番目の値が大きくなります。

4

1 に答える 1

3

ご覧のとおり、の定義によりset、比較操作を指定できます

template < class Key, class Compare = less<Key>,
       class Allocator = allocator<Key> > class set;

Compareoperator()比較を行うを持っているクラスにすることができます。この演算子は2つの値を取りtrue、最初の値をセットの2番目の値の前に配置する場合は返す必要があります。

于 2012-12-02T11:00:22.090 に答える