Выбор ответа Middle Алгоритмы STL и ranges обновлено
Проекции в ranges
Вопрос
Что делает std::ranges::sort(people, {}, &Person::age);?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сортирует людей по age компаратором по умолчанию. В алгоритмах std::ranges после компаратора идёт проекция: функция, применяемая к элементу перед сравнением.
Варианты ответа
- Сортирует, а затем оставляет в элементах только поле
age - Не компилируется: третьим аргументом должен быть компаратор
- Сортирует людей по адресам полей
ageвнутри объектов - Сортирует людей по
ageкомпаратором по умолчаниюправильный ответ
Разбор
В алгоритмах std::ranges после компаратора идёт проекция: функция, применяемая к элементу перед сравнением. Указатель на член подходит как проекция. {} означает компаратор по умолчанию.
- Элементы не меняются, меняется только порядок.
- Сигнатура ranges-алгоритмов как раз допускает проекцию.
- Сравниваются значения полей.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.