Ich habe einen Std :: Vector und ich möchte ein bestimmtes Attribut jedes Elements überprüfen. SomeStruct hat ein Attribut 'type'. Ich möchte überprüfen, ob dieses Attribut entweder Type1 oder Type2 ist.Wie boost :: lambda zusammen mit std :: find_if?
Mein Plan ist es, boost :: lambda zu verwenden.
std::vector<SomeStruct>::const_iterator it =
std::find_if(
vec.begin(), vec.end(),
_1.type == SomeStruct::Type1 || _1.type == SomeStruct::Type2);
Da brauche ich ein bestimmtes Attribut jedes Elements zugreifen zu können, bin ich nicht sicher, ob ich das kann Verwendung boost :: lambda überhaupt.
Irgendwelche Hinweise?
Das ist perfekt, aber ich kann nicht ergründen, warum es funktioniert. Es funktioniert auch genauso, wenn du bindst (& SomeStruct :: func, _1) (wobei func eine Funktion ist), was mich noch mehr verwirrt. – yhager
@yhager 'bind (& SomeStruct :: type, _1)' gibt Ihnen ein Boost-Lambda, das für das Ergebnis von '.type' auf dem Objekt steht, für das' _1' ein Platzhalter ist. Weitere Informationen finden Sie in der Dokumentation zu bind (http://www.boost.org/doc/libs/1_50_0/doc/html/lambda/le_in_details.html#lambda.bind_expressions). – sepp2k