Warum kann ich mit std :: remove_if keine Zeichenfolge aus einem std :: set entfernen? [Duplikat]

Mögliche Duplikate:
remove_if-Äquivalent für std :: map

Ich habe eine Reihe von Zeichenfolgen:

set <wstring> strings;
// ...

Ich möchte Zeichenfolgen gemäß einem Prädikat entfernen, z.

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

Wenn ich das versuche, erhalte ich den folgenden Compiler-Fehler:

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>' 

Der Fehler scheint darauf hinzudeutenstd::string hat keinen By-Value-Copy-Konstruktor (was illegal wäre). Ist es irgendwie schlecht zu bedienenstd::remove_if mitstd::set ? Sollte ich stattdessen etwas anderes tun, wie zum Beispiel mehrere Iterationen vonset::find() gefolgt vonset::erase() ?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage