2011-04-29 70 views
4
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 

这是我的理解:C++ STL - 为什么要用(W <* I),而不是(W == * I)

返回值*我从LOWER_BOUND总是不小于比w大。 换句话说,w <= *i

这里有一个问题,为什么不直接使用以下条件检查?

if ((i != vw.end()) && (w == *i)) // why not use (w == *i)? 
    // found w in vw 

谢谢

回答

8

因为隐式接口<algorithm>用来分类和诸如此类的东西只需要要对数据类型定义的<操作。如果他们使用==,他们会强制开发人员在自定义类型上实现它以从这些功能中受益。

换句话说,如果你犯了一个排序类型Foo,使用在<algorithm>定义的函数,你只需要重载<操作。

+0

你是说Widget只需要重载operator <而不是operator ==? - 谢谢 – q0987 2011-04-29 04:22:36

+0

@ q0987是的,这就是我的意思。 – zneak 2011-04-29 04:23:13

相关问题