class Person
データ メンバー ' ' に基づいてのオブジェクトの配列を並べ替えたいと考えていますage
。オブジェクトを に保存しますvector<Person> v
。
私が理解している限り、このアクションを実行するには少なくとも 4 つの方法がある可能性があり、以下に記載されている方法に基づいて次の質問があります。
operator()
クラス内での定義はどのように機能しますか? ここでも「<」演算子をオーバーロードしないでください。どうして '()' ?方法1では第3引数にオブジェクトを送ったのですが、方法2では関数名を送ってしまいました。なぜそうなのですか?
4つの方法のうち、どれが最適ですか? 方法3が一番簡単だと感じました。
方法 1
class cmp
{
public:
bool operator() ( Person const &a, Person const &b )
{
return a.age < b.age ;
}
};
sort( v.begin(), v.end(), cmp());
方法 2
bool cmp( const Person a, const Person b )
{
return a.age < b.age ;
}
sort( v.begin(), v.end(), cmp );
方法 3
bool operator < ( const Person a, const Person b )
{
return a.age < b.age ;
}
sort( v.begin(), v.end());
方法 4
//using lambda expression
sort( v.begin(), v.end(), [](const Person &a, const Person &b){return a.age < b.age;});