を使用するには2つのオプションがありますstd::sort。operator <1つは、クラスをオーバーロードすることです。
bool operator< (const Card &lhs, const Card &rhs) {
return lhs.value < rhs.value;
}
Cardただし、これを行うのは、このようなオブジェクトを常に比較することが本当に理にかなっている場合のみにしてください。特定のソートにのみこれが必要な場合sortは、カスタムコンパレータを受け入れるバージョンを使用できます。
述語を定義する方法は複数あります。再利用可能であるが単純な基準の場合、クラスの静的関数を使用できます。
class Card
{
public:
// ... as before
static bool lesserValue(const Card &lhs, const Card &rhs) {
return lhs.value < rhs.value;
}
};
使用法:
std::sort(from, to, &Card::lesserValue);
ワンショットのもの(または内部状態を保持する必要がある複雑な基準)の場合は、から派生したクラスを使用しstd::binary_function、その中にcomaprisonロジックを実装しますoperator()。C ++ 11では、これにラムダ関数を使用することもできます。
std::sort(from, to, [](const Card &lhs, const Card &rhs) { return lhs.value < rhs.value; });