STL предоставляет двоичные функции поиска std:: lower_bound и std:: upper_bound, но я склонен не использовать их, потому что я не мог вспомнить, что они делают, потому что их контракты кажутся мне совершенно мистифицированными.
Просто взглянув на имена,
Я предполагаю, что "lower_bound" может быть коротким для "последней нижней границы",
т.е. последний элемент в отсортированном списке, который равен <= заданный вал (если он есть).
И аналогичным образом я бы предположил, что "upper_bound" может быть коротким для "первой верхней границы",
т.е. первый элемент в отсортированном списке, который является >= заданный вал (если он есть).
Но в документации говорится, что они что-то отличаются от этого -
что-то, что кажется смешением назад и случайным, для меня.
Перефразировать документ:
- lower_bound находит первый элемент, который >= val
- upper_bound находит первый элемент, который > val
Таким образом, lower_bound не обнаруживает нижней границы; он находит первую верхнюю границу!? И upper_bound находит первую строгую верхнюю границу.
Это имеет смысл? Как вы его помните?