Мені потрібен алгоритм бінарного пошуку, сумісний з контейнерами ST + C ++, щось подібне 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
.