Мне нужен алгоритм двоичного поиска, который совместим с контейнерами STL С++, что-то вроде std::binary_search
в заголовке стандартной библиотеки <algorithm>
, но мне нужно, чтобы он возвращал итератор, указывающий на результат, а не простой логический сообщая мне, существует ли элемент.
(На стороне примечания, какой ад был стандартным мышлением комитета, когда они определяли API для binary_search?!)
Моя главная проблема здесь в том, что мне нужна скорость двоичного поиска, поэтому, хотя я могу найти данные с другими алгоритмами, как указано ниже, я хочу воспользоваться тем фактом, что мои данные отсортированы для получения преимуществ бинарного поиска, а не линейного поиска.
до сих пор lower_bound
и upper_bound
терпят неудачу, если отсутствует нулевая точка:
//lousy pseudo code
vector(1,2,3,4,6,7,8,9,0) //notice no 5
iter = lower_bound_or_upper_bound(start,end,5)
iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6
Примечание. Я также отлично использую алгоритм, который не принадлежит пространству имен std, если он совместим с контейнерами. Например, boost::binary_search
.