Iterator::min и max теперь учитывают переопределённые реализации сравнения
15.08.2026Методы нахождения минимума и максимума в итераторе больше не реализованы через варианты «найти по ключу». Они вызывают переопределённые реализации сравнения, если тип их переопределяет.
Что это меняет
Смысл в том, чтобы результат совпадал с тем, что даёт прямой вызов сравнения на том же типе. Раньше метод итератора мог получить другой ответ, чем тот же вызов на значениях.
Для целых чисел и строк разницы нет — сравнение там стандартное. Разница появляется у типов, где сравнение переопределено осмысленно: например, у вещественных чисел с правилом упорядочивания, где неупорядоченные значения считаются равными и неупорядоченность не считается меньшим значением.
То есть на таких типах метод итератора вёл себя иначе, чем прямое сравнение, — а теперь ведёт себя так же.
Почему это важно для кода
Собственные правила упорядочивания обычно вводят не просто так: чтобы «меньше» означало то, что нужно предметной области. Если стандартные методы их игнорируют, код получает не тот минимум, который ожидает, — и ошибка проявляется не там, где написано.
Оригинал
Iterator::{min,max}(_by_key) should use overridden min/max/lt
Упоминаний: 1 · Просмотров: 2