【发布时间】:2014-11-07 22:09:55
【问题描述】:
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 有关。元素向量已排序。我想在这个向量上找到插入点,如果值恰好在向量中,则返回它的索引。此外,例如,大小为 7 的向量上有 8 个插入点。我不断收到段错误,我认为这可能是:因一个错误或类似错误而关闭,有人可以帮忙吗?谢谢。
【问题讨论】:
-
无关:我想只是破坏这个并使用像
std::lower_bound这样的东西会作弊。 -
我现在正在使用类似的算法,它可以工作,但无法通过运行时间测试
标签: c++ search binary-search