template <class T, class C>
size_t idx(const std::vector<T>& elements, const C& val)
{
if (val<elements[0]||val==elements[0])
return 0;
int s=elements.size();
if (val>elements[s-1])
return s;
int min=0;
int max=s-1;
int mid;
while (max >= min){
mid=(max+min)/2;
if (val<elements[min])
return min;
else if (val>elements[max])
return max+1;
else if((val==elements[mid])||((val>elements[mid-1])&&(val<elements[mid])))
return mid;
else if((val>elements[mid])&&(val<elements[mid+1]))
return mid+1;
else if (val>elements[mid+1])
min=mid+1;
else
max=mid-1;
}
return max;
}
Это связано с btree
. Вектор элемента отсортирован. Я хочу найти точку вставки для этого вектора, если значение находится в векторе, верните его индекс. Кроме того, есть, например, 8 точек вставки в векторе размера: 7. Я продолжаю получать segfault, и я думаю, что это может быть: отключено одной ошибкой или подобным, может ли кто-нибудь помочь? Благодарю.Двоичный поиск по отсортированным вектором
Несвязанный: я предполагаю, что просто обманываю это и использую что-то вроде ['std :: lower_bound'] (http://en.cppreference.com/w/cpp/algorithm/lower_bound), обманывая. – WhozCraig
Я использую подобный алгоритм сейчас, и он работает, но не может пройти тест времени выполнения – user4228739