[英]Binary search on sorted vector
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;
}
This is related to btree
. 这与btree
有关。 Element vector is sorted. 元素向量已排序。 I want to find the insertion point on this vector, if the value happens to be in the vector, return the index of it. 我想在此向量上找到插入点,如果该值恰好在向量中,则返回它的索引。 Also, there is, for example, 8 insertion point on the vector of size: 7. I keep getting a segfault and I think this might be an: off by one error or similar, can some one help? 此外,例如,在大小为矢量的向量上有8个插入点:7.我一直在遇到段错误,我认为这可能是一个错误:由于一个错误或类似原因,可以提供一些帮助吗? Thanks. 谢谢。
If vector size is 2, then min == mid == 0
and max == 1
. 如果向量大小为2,则min == mid == 0
和max == 1
。 And in the code you check element at mid - 1
, that is -1
, so your program exhibits undefined behaviour. 并且在代码中,您在mid - 1
检查元素-1
,因此您的程序表现出未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.