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
以下是我的理解:
来自lower_bound的 * i 的返回值始终不小于 w 的返回值。
换句话说,w <= *i
以下是问题,为什么不直接使用以下条件进行检查?
if ( (i != vw.end()) && (w == *i) ) // why not use (w == *i)?
// found w in vw
谢谢
答案 0 :(得分:8)
因为隐式接口<algorithm>
用于排序,并且那种东西只需要在数据类型上定义<
运算符。如果他们使用==
,他们会强迫开发人员在自定义类型上实现它,以便从这些函数中受益。
换句话说,如果您创建可排序类型Foo
,要使用<algorithm>
中定义的函数,您只需要重载<
运算符。