metodo c++ algorithm c++11 stl lambda

metodo - Expresión lambda de C++ en std:: find_if?



metodo find c++ (2)

Por lo que entiendo, el código debería verse así:

auto foundItem = std::find_if(selectedItems.begin(), selectedItems.end(), [&i](LWItem const& item) { return item->GetID() == i; });

Esto capturará el LWItem que tiene una ID igual a i, siendo i una ID declarada previamente.

Tengo un std :: map que contiene una clase y esa clase tiene un id. Tengo una identificación que intento encontrar en el set.

typedef std::set<LWItem> ItemSet; ItemSet selectedItems; LWItemID i = someID; ItemSet::iterator isi; isi = std::find_if(selectedItems.begin(), selectedItems.end(), [&a](LWItemID i)->bool { return a->GetID()==i; }

Recibo un error que dice que no se encuentra la variable de captura lambda, pero no tengo idea de lo que se supone que debo hacer para capturar el contenido del contenedor a medida que se itera. Además, sé que no puedo hacer esto con un bucle, pero estoy tratando de aprender las funciones lambda.


Tienes tu captura y argumento invertidos. El bit dentro de [] es la captura; El bit en el interior () es la lista de argumentos. Aquí desea capturar la variable local i y tomar un argumento:

[i](LWItem a)->bool { return a->GetID()==i; }

Esto es efectivamente una abreviatura para crear una clase de functor con la variable local i :

struct { LWItemID i; auto operator()(LWItem a) -> bool { return a->GetID()==i; } } lambda = {i};