Возможный дубликат:
remove_if для std :: map
У меня есть набор строк:
set <wstring> strings;
// ...
Я хочу удалить строки в соответствии с предикатом, например:
std::remove_if ( strings.begin(), strings.end(), []( const wstring &s ) -> bool { return s == L"matching"; });
Когда я пытаюсь это сделать, я получаю следующую ошибку компилятора:
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>'
Похоже, что ошибка указывает на то, что std::string
не имеет конструктора копирования по-значению (что было бы незаконным). Как-то плохо использовать std::remove_if
с std::set
? Должен ли я делать что-то другое, например, несколько итераций set::find()
за которыми следует set::erase()
?