我需要一个与C ++ STL容器兼容的二进制搜索算法,就像std::binary_search
在标准库的<algorithm>
标头中一样,但是我需要它返回指向结果的迭代器,而不是简单的布尔值告诉我元素是否存在。
(附带说明,标准委员会在为binary_search定义API时到底在想什么?!)
我主要关心的是我需要二进制搜索的速度,因此,尽管可以使用其他算法查找数据,如下所述,但我想利用这样一个事实,即我的数据经过排序以获得二进制的好处搜索,而不是线性搜索。
到目前为止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
。