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>
中定义的函数,你只需要重载 <
操作符。