¿Por qué no puedo eliminar una cadena de un std :: set con std :: remove_if? [duplicar]

Posible duplicado:
remove_if equivalente para std :: map

Tengo un conjunto de cuerdas:

set <wstring> strings;
// ...

Deseo eliminar cadenas según un predicado, por ejemplo:

std::remove_if ( strings.begin(), strings.end(), []( const wstring &s ) -> bool { return s == L"matching"; });

Cuando intento esto, obtengo el siguiente error del compilador:

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 error parece sugerir questd::string no tiene un constructor de copia por valor (lo que sería ilegal). Es de alguna manera malo de usarstd::remove_if constd::set ? ¿Debería estar haciendo algo más, como varias iteraciones deset::find() seguido porset::erase() ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta