C ++ STL - 为什么要使用!(w< * i)而不是(w == * i)

时间:2011-04-29 04:10:07

标签: c++ stl

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

谢谢

1 个答案:

答案 0 :(得分:8)

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

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