7

クラスA<コンパレータがあります。Aそれらを使用して配列を降順に並べ替えるにはどうすればよいですか?

class A {
...
};

class LessA {
   bool operator()(const A& a1, const A& a2) const {
   ...
   }
}

vector<A> v;
sort(v.begin(), v.end(), ???);

???を に基づいたものに置き換える必要があると思いますLessAが、そこに何を入れるべきかわかりません。ラムダ関数を使用することを考えましたが、もっと短いものを探していました。

4

5 に答える 5

6

範囲を後方に並べ替えます。

vector<A> v;
sort(v.rbegin(), v.rend(), LessA());

rbeginrend逆イテレータを提供します。

紛らわしい場合はカプセル化します。

void reverse_sort(vector<A>& v) {
    sort(v.rbegin(), v.rend(), LessA());    
}

使用法:

vector<A> v;
reverse_sort(v);
于 2013-05-14T18:57:47.510 に答える
0

lt(a, b)を実装する関数が与えられた場合、を返すa<bことで実装する関数を作成できます。を実装するには、 を返す必要があります。a>=b!lt(a, b)>!lt(b, a) && !(lt(a,b) || lt(b,a))

lt(a, b) || lt(b, a)は と同等なa!=bので、上記はa>=b && a!=bに還元されると同等a>bです。

ただし、おそらくstd::not2(LessA()). それは>=、降順でソートされます。

于 2013-05-15T20:57:39.263 に答える