Почему требование std::ranges::lower_bound отличается от требования std::lower_bound? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему требование std::ranges::lower_bound отличается от требования std::lower_bound? [дубликат]

Сообщение Anonymous »

Я заметил, что версия без диапазонов требует, чтобы предикат сравнения был BinaryPredicate [alg.sorting.general.2], но версия диапазонов требует std::indirect_strict_weak_order [lower.bound] (что меня банит использовать less_equal).
Изменить:
Я случайно обнаружил, что N1313 обсуждал это, и LWG 270 разрешил вызывать std ::lower_bound с предикатом, который не удовлетворяет strict_weak_order, например less_equal. Теперь стандарт гласит:

Все алгоритмы в [alg.binary.search] являются версиями двоичного поиска и предполагают, что искомая последовательность разделена с помощью относительно выражения, сформированного путем привязки ключа поиска к аргументу функции сравнения. - [alg.binary.search.general]


Предварительные условия: элементы e из [first, Last) разделены с помощью относительно выражения
bool(invoke(comp, ignore(proj, e), value)). - [lower.bound]

То есть, std::lower_bound требует только предиката can секционировать элементы, что более гибко, чем std ::indirect_strict_weak_order. Например, std::less_euqal — это предикат раздела {0, 1, 2, 3, но это не строгое отношение слабого порядка, поэтому его можно использовать для вызова std::lower_bound< /code>, но его нельзя использовать для вызова std::ranges::lower_bound.
Похожий вопрос в stackoverflow не задавался по этому поводу, он спрашивает о почему предикат, используемый для std::ranges::lower_bound, должен принимать два однородных типа. std::less_euqal является однородным сравнением, но его по-прежнему нельзя использовать в std::ranges::lower_bound, поскольку это не строгое отношение слабого порядка. Так что аналогичный вопрос на самом деле не имеет почти ничего общего с этим вопросом.

Подробнее здесь: https://stackoverflow.com/questions/764 ... ower-bound
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»