是否有一个使用二分搜索的函数,例如lower_bound
但这会返回last item 小于或等于根据给定的谓词?
lower_bound
定义为:
找到的位置first有序范围内具有值的元素大于或等于指定值,其中排序标准可以由二元谓词指定。
and upper_bound
:
找到的位置first有序范围内的元素,其值为比...更棒指定值,其中排序标准可以由二元谓词指定。
具体来说,我有一个按时间排序的事件的容器,在给定的时间内,我想找到之前或当时出现的最后一个项目。我可以通过上/下界、反向迭代器和使用的某种组合来实现这一点吗std::greater
or std::greater_equal
?
编辑:
如果您在数组开始之前询问一个点,则需要对 user763305 的建议进行调整以应对:
iterator it=upper_bound(begin(), end(), val, LessThanFunction());
if (it!=begin()) {
it--; // not at end of array so rewind to previous item
} else {
it=end(); // no items before this point, so return end()
}
return it;
在排序容器中,最后一个元素小于或等于x
, 是第一个大于的元素之前的元素x
.
因此你可以打电话std::upper_bound
,并将返回的迭代器递减一次。
(在递减之前,您当然必须检查它是否不是开始迭代器;如果是,则不存在小于或等于的元素x
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)