是否有使用二分搜索的函数,例如根据给定谓词lower_bound
返回最后一项小于或等于的项?
lower_bound
定义为:
查找值大于或等于指定值的有序范围中的第一个元素的位置,其中排序标准可以由二元谓词指定。
和upper_bound
:
查找值大于指定值的有序范围中的第一个元素的位置,其中排序标准可以由二元谓词指定。
具体来说,我有一个按时间排序的事件容器,并且在给定时间内,我想找到在该点之前或该点出现的最后一个项目。我可以通过上/下界、反向迭代器和使用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;