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).