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