Выбор ответа Middle Алгоритмы STL и ranges обновлено

Проекции в ranges

Вопрос

Что делает std::ranges::sort(people, {}, &Person::age);?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сортирует людей по age компаратором по умолчанию. В алгоритмах std::ranges после компаратора идёт проекция: функция, применяемая к элементу перед сравнением.

Варианты ответа

  1. Сортирует, а затем оставляет в элементах только поле age
  2. Не компилируется: третьим аргументом должен быть компаратор
  3. Сортирует людей по адресам полей age внутри объектов
  4. Сортирует людей по age компаратором по умолчаниюправильный ответ

Разбор

В алгоритмах std::ranges после компаратора идёт проекция: функция, применяемая к элементу перед сравнением. Указатель на член подходит как проекция. {} означает компаратор по умолчанию.

  • Элементы не меняются, меняется только порядок.
  • Сигнатура ranges-алгоритмов как раз допускает проекцию.
  • Сравниваются значения полей.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.