为什么lower_bound和upper_bound的谓词版本不一致地传递迭代器值?

时间:2015-02-12 18:50:47

标签: c++ algorithm stl

upper_bound的二元谓词中,迭代器值作为第二个参数传递,而在lower_bound中,迭代器值作为第一个参数传递。

这里有什么推理?如果我在编写自己的二元谓词时记住这个细节是否重要?


注意我的参考资料是www.cplusplus.com(我被告知可能不是最佳参考)我通过查看stl库附带的实现来确认它VC++

1 个答案:

答案 0 :(得分:6)

这是故意的。原因是你可以为两种算法使用相同的比较器。考虑一下说明。 lower_bound

  

返回指向[em>不小于而不是(即大于或等于)值的范围[first,last]中的第一个元素的迭代器。

upper_bound

  

返回一个迭代器,该迭代器指向范围[first,last]中大于而不是值的第一个元素。

考虑标准比较器为<。为了实现仅<的两种算法,一个需要!(elem < value)而另一个需要value < elem。论证顺序的倒置直接来自于此。

这不应影响您实施Comparator的方式。