Здесь я создал функцию бинарного поиска, используя std::lower_bound()
. Как показано ниже. Это отлично работает, если я передаю std::pair
, однако я хочу просто выполнить бинарный поиск по первому значению pair
. Я думаю, что в параметре Comp
lower_bound()
это можно сделать, но не совсем точно.lower_bound для выполнения двоичного поиска
i.e мой вектор выглядит следующим образом.
std::vector<std::pair<int,double>> v;
, и я просто хочу, чтобы сравнить первое значение в int
то есть.
template<class ForwardIt, class T>
ForwardIt binary_searcht(ForwardIt first, ForwardIt last, const T& value)
{
ForwardIt i = std::lower_bound(first, last, value);
if (i != last && !(value < *i))
return i;
else
return last;
}
Любая причина, по которой вы определяете функцию как шаблон, когда типы являются kn своя? Это просто усложняет проблему. –
@MarkRansom, потому что мне нужно вернуть итератор.нормальный двоичный поиск возвращает bool – CodersSC
Пара примечаний: 1) 'lower_bound' ожидает, что' vector' будет отсортирован заранее (сопоставление функции сравнения), и 2) стандартная библиотека поддерживает сравнение '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' : lower_bound (first, last, {value.first, std :: numeric_limits :: min()}); 'без определения вашего собственного сравнения (но это было бы брошено NaNs, я подозреваю). –