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)
谢谢
因为隐式接口<algorithm>用于排序,并且那种东西只需要<在数据类型上定义运算符.如果他们使用==,他们会强迫开发人员在自定义类型上实现它以从这些功能中受益.
换句话说,如果您创建可排序类型Foo,要使用中定义的函数<algorithm>,您只需要重载<运算符.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |