簡體   English   中英

為什么等價條件是必要的?

[英]why does the equivalent condition necessary?

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

所以我認為你是說以下是可以的

return p1.lastname() < p2.lastname() ||
      p1.firstname() < p2.firstname());

但這是不正確的。 考慮兩個人“Andy Zerkis”和“Zebedee Archer”。 使用上面的代碼 AZ < ZA 和 ZA < AZ。 所以兩個名字都比另一個少。 毫不奇怪,這會混淆排序算法。 另一種說法是上面的代碼沒有強加嚴格的弱排序。 特別是它打破了這樣的規則,即 x < y 和 y < x 都為真。

如果您不熟悉嚴格的弱排序,它似乎會讓人感到困惑,但實際上它只是說明了您對任何排序標准所期望的顯而易見的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM