Possible Duplicate:
remove_if equivalent for std::mapWarum kann ich einen String nicht aus einem std :: set mit std :: remove_if entfernen?
Ich habe eine Reihe von Strings:
set <wstring> strings;
// ...
Ich wünsche Strings entfernen nach einem Prädikat, zum Beispiel:
std::remove_if (strings.begin(), strings.end(), [](const wstring &s) -> bool { return s == L"matching"; });
Wenn ich dies versuchen, erhalte ich die 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>'
Die e Rrror scheint darauf hinzuweisen, dass std::string
keinen Kopie-Konstruktor für Wert nach Wert hat (was illegal wäre). Ist es irgendwie schlecht, std::remove_if
mit std::set
zu verwenden? Sollte ich stattdessen etwas anderes machen, zB mehrere Iterationen von set::find()
gefolgt von set::erase()
?
Ihre einfache Probe ersetzt werden kann 'strings.erase (L "matching");'. Man nimmt an, dass das * tatsächliche * Prädikat nicht so trivial ist. –
@ Robᵩ Ja das war nur ein Beispiel, ich benötige ein Funktionsobjekt. – Benj