std::bind2nd( ... AND ... )



  • Hallo Forum:

    Ich würde gerne mit std::find_if in einem std::vector eine Zahl finden, die zwischen 11 und 20 liegt.

    Suche ich nur nach einer Bedingung, z.B. nach einer Zahl > 11, geht dies wunderbar mit:

    std::vector<short>::iterator itEnd = std::find_if( Values.begin(), Values.end(), std::bind2nd( std::greater_equal<short>(), 11 ) );
    

    Aber was mache ich, wenn ich 2 Bedingungen habe? Das hier kompiliert nicht:

    std::vector<short>::iterator itEnd = std::find_if( Values.begin(), Values.end(), std::bind2nd( std::greater_equal<short>(), 11 & std::less<short>(), 20 );
    

    Danke an alle!!



  • Bastel Dir doch einfach ein eigenes Prädikat IsInRange(x,y) das sowas testen kann.



  • Dazu gibt es in der STL nichts entsprechendes, aber in verschiedenen Biliotheken gibt es compose()-Funktoren, mit denen du so eine Konstruktion nachbauen kannst (ein Beispiel findest du im Magazin unter Aufbau der STL 3 - Kapitel 3.4 - den für dich benötigten compose_f_gx_hx kannst du analog dazu entwickeln).


Anmelden zum Antworten