Possible Duplicate:
remove_if equivalent for std::map¿Por qué no puedo eliminar una cadena de un std :: set con std :: remove_if?
que tienen un conjunto de cadenas:
set <wstring> strings;
// ...
deseo de eliminar las cadenas de acuerdo con el predicado, por ejemplo:
std::remove_if (strings.begin(), strings.end(), [](const wstring &s) -> bool { return s == L"matching"; });
Cuando intento esto, me sale el siguiente compilador error:
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm(1840): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::basic_string<_Elem,_Traits,_Ax>'
El e rror parece sugerir que std::string
no tiene un constructor de copia por valor (que sería ilegal). ¿Es de alguna manera malo usar std::remove_if
con std::set
? ¿Debo hacer otra cosa en su lugar, como varias iteraciones de set::find()
seguido de set::erase()
?
Su muestra simple puede ser reemplazado por 'strings.erase (L "juego");'. Uno supone que su predicado * real * no es tan trivial. –
@ Robᵩ Sí, eso fue solo un ejemplo, sí requiero un objeto de función. – Benj