我有一个日期类GregorianDate
和一个std::vector<GregorianDate>
实例dates
。该向量已排序。
当前,给定一个GregorianDate
实例date
,我得到了表达式
std::vector<GregorianDate>::const_iterator it = std::find_if(
dates.begin(),
dates.end(),
std::bind2nd(std::greater<GregorianDate>(), date)
);
我很乐意将其替换为
std::vector<GregorianDate>::const_iterator it =
std::lower_bound(dates.begin(), dates.end(), date);
因为不推荐使用bind2nd
并对dates
进行了排序。
对于任何date
,两个表达式的结果是否相同?
答案 0 :(得分:3)
结果不一样。 std::lower_bound
为您提供集合中第一个大于或等于您要寻找的元素的元素,如果没有,则最后一个元素。另一方面,std::find_if
将仅返回比较器返回true的元素,而std::greater
如果元素相等则不会返回true。
您需要使用std::upper_bound
来匹配对find_if
的调用(upper_bound
返回的第一个元素大于要查找的元素),或在{{ 1}}以匹配find_if
的工作方式。