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

q09*_*987 4 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
Run Code Online (Sandbox Code Playgroud)

这是我的理解:

来自lower_bound 的*i的返回值始终不小于w的返回值.换一种说法,w <= *i

这是问题,为什么不直接使用以下条件进行检查?

if ( (i != vw.end()) && (w == *i) ) // why not use (w == *i)?
    // found w in vw
Run Code Online (Sandbox Code Playgroud)

谢谢

zne*_*eak 8

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

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