C++ 標準ライブラリのコードについて質問があります。私の質問は!(p2.lastname() < p1.lastname())
、条件が姓が p1 と p2 に相当することを表していると思うので、必要ではないようです。条件を削除すると、コードは正常に動作するようです。この厳密な弱い順序付けを見ました。関連記事を読みましたが、コンセプトがよくわかりませんでした。条件が必要な理由を教えてください。
class Person {
public:
string firstname() const;
string lastname() const;
};
class PersonSortCriterion {
public:
bool operator() (const Person& p1, const Person& p2) const {
// 1) Compare the lastnames.
// 2) If the lastnames are equivalent, compare the firstnames.
return p1.lastname() < p2.lastname() ||
(!(p2.lastname() < p1.lastname()) &&
p1.firstname() < p2.firstname());
}
};