Вы имеете в виду функции lower_bound
/ upper_bound
? Они выполняют бинарный поиск и возвращают ближайший элемент над искомым значением.
Пояснение: глобальные версии lower / upper_bound работают только в том случае, если диапазон отсортирован, так как они используют некоторый вид двоичного поиска внутри. (Очевидно, методы lower / upper_bound в std :: map всегда работают). В своем вопросе вы сказали, что ищете какой-то бинарный поиск, поэтому я предполагаю, что диапазон отсортирован.
Кроме того, ни lower_bound
, ни upper_bound
не возвращает ближайшего члена. Если значение X
, которое вы ищете, не входит в диапазон, они оба вернут первый элемент больше X
. В противном случае lower_bound
вернет первое значение, равное X
, upper_bound
вернет последнее значение, равное X
.
Итак, чтобы найти ближайшее значение, вам нужно будет
- звоните
lower_bound
- если он возвращает конец диапазона, все значения меньше
X
. Последний (то есть самый высокий) элемент является ближайшим
- это если возвращает начало диапазона, все значения больше
X
. Первый (т.е. самый низкий) элемент является ближайшим
- если он возвращает элемент в середине диапазона, проверьте этот элемент и элемент перед ним - тот, который ближе к
X
, тот, который вы ищете