Зачем нужно эквивалентное условие? - PullRequest
1 голос
/ 29 апреля 2020

У меня есть вопрос по коду кода из стандартной библиотеки 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());
  }
};

1 Ответ

3 голосов
/ 29 апреля 2020

Так что я думаю, что вы говорите, что все в порядке

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

, но это неверно. Рассмотрим двух людей: «Энди Зеркис» и «Зебеди Арчер». Используя приведенный выше код, AZ

Строгое слабое упорядочение кажется сбивающим с толку, если вы не знакомы с ним, но на самом деле это просто говорит очевидные вещи, которые можно ожидать от любого критерия сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...