Iterator::min и max теперь учитывают переопределённые реализации сравнения

15.08.2026

Методы нахождения минимума и максимума в итераторе больше не реализованы через варианты «найти по ключу». Они вызывают переопределённые реализации сравнения, если тип их переопределяет.

Что это меняет

Смысл в том, чтобы результат совпадал с тем, что даёт прямой вызов сравнения на том же типе. Раньше метод итератора мог получить другой ответ, чем тот же вызов на значениях.

Для целых чисел и строк разницы нет — сравнение там стандартное. Разница появляется у типов, где сравнение переопределено осмысленно: например, у вещественных чисел с правилом упорядочивания, где неупорядоченные значения считаются равными и неупорядоченность не считается меньшим значением.

То есть на таких типах метод итератора вёл себя иначе, чем прямое сравнение, — а теперь ведёт себя так же.

Почему это важно для кода

Собственные правила упорядочивания обычно вводят не просто так: чтобы «меньше» означало то, что нужно предметной области. Если стандартные методы их игнорируют, код получает не тот минимум, который ожидает, — и ошибка проявляется не там, где написано.

Оригинал

Iterator::{min,max}(_by_key) should use overridden min/max/lt

Упоминаний: 1 · Просмотров: 2