Выбор ответа Middle Алгоритмы STL и ranges спрашивают часто обновлено
Компаратор с <=
Вопрос
Что не так с std::sort(v.begin(), v.end(), [](int a, int b) { return a <= b; });?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет строгого слабого порядка: это UB, возможен выход за границы массива. Требование comp(a, a) == false нарушено.
Варианты ответа
- Нет строгого слабого порядка: это UB, возможен выход за границы массиваправильный ответ
- Сортировка будет по убыванию, так как
<=инвертирует порядок - Ничего: для сортировки
<=эквивалентен<, равные не важны - Не скомпилируется:
std::sortтребует компаратор без=
Разбор
Требование comp(a, a) == false нарушено. Реализация introsort полагается на него в неохраняемых циклах и при большом числе одинаковых элементов может прочитать за пределами массива. Правильно: a < b.
- Убывание дал бы
a > b(илиstd::greater<>). - На различных элементах результат часто совпадает, поэтому ошибка живёт до первых дубликатов.
- Компилятор такое не ловит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.