Мне нужен алгоритм двоичного поиска, который совместим с контейнерами C ++ 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
.