2011-04-29 3 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 

(== * I W)ここで(<* I w)のではなく、が私の理解です:!C++ STL - なぜ使用

の戻り値* iの LOWER_BOUNDからは常に小さくありませんwのそれよりも大きい。 つまり、w <= *i

ここに質問があります。なぜ、次の条件を直接チェックしてみませんか?

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

暗黙のインタフェース<algorithm>は、並べ替えに使用するとかのようなものが唯一のデータ型に定義する<オペレータを必要とするため、あなたに

答えて

8

に感謝します。 ==を使用した場合、開発者はこれらの機能を利用するためにカスタムタイプにも実装するよう強制されます。

つまり、ソート可能なタイプFooを作成する場合は、<algorithm>で定義された関数を使用するには、<演算子をオーバーロードする必要があります。

+0

ウィジェットは演算子==ではなく演算子<をオーバーロードする必要があるだけですか? - ありがとうございます。 – q0987

+0

@ q0987はい、そうです。 – zneak

関連する問題