Possible Duplicate:
remove_if equivalent for std::mapDlaczego nie można usunąć ciąg z std :: set z std :: remove_if?
mam komplet strun:
set <wstring> strings;
// ...
I chcesz usunąć ciągi według orzecznika, np:
std::remove_if (strings.begin(), strings.end(), [](const wstring &s) -> bool { return s == L"matching"; });
Gdy próbuję tego, pojawia się następujący kompilatora błąd:
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>'
e rror wydaje się sugerować, że std::string
nie ma konstruktora kopii o wartości wartości (który byłby nielegalny). Czy korzystanie z std::remove_if
jest jakoś złe z std::set
? Czy powinienem robić coś innego zamiast takiego, jak kilka iteracji set::find()
, a następnie set::erase()
?
Twój prosty próbka może być zastąpione przez 'strings.erase (L "dopasowania");'. Zakłada się, że twój * rzeczywisty * predykat nie jest tak banalny. –
@ Robᵩ Tak, to był tylko przykład, potrzebuję obiektu funkcji. – Benj