vector<Widget> vw;
// populate vw
sort(vw.begin(), vw.end());
Widget w;

vector<Widget>::iterator i = lower_bound(vw.begin(), vw.end(), w);

if ( (i != vw.end()) && !(w < *i) ) // Yes, it is correct!
    // found w in vw

以下是我的理解:

*i 从lower_bound 的返回值总是不小于 w 的返回值。
换句话说,w <= *i
那么问题来了,为什么不直接使用下面的条件进行检查呢?
if ( (i != vw.end()) && (w == *i) ) // why not use (w == *i)?
    // found w in vw

谢谢你

最佳答案

因为隐式接口(interface) <algorithm> 用于排序,而这种东西只需要在数据类型上定义 < 运算符。如果他们使用 == ,他们将迫使开发人员也在自定义类型上实现它以从这些函数中受益。

换句话说,如果你创建一个可排序的类型 Foo ,要使用 <algorithm> 中定义的函数,你只需要重载 < 操作符。

10-08 01:15