我对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());
}
};