Possible Duplicate:
remove_if equivalent for std::mapTại sao tôi không thể xóa chuỗi khỏi std :: set with std :: remove_if?
Tôi có một tập hợp các chuỗi:
set <wstring> strings;
// ...
tôi muốn loại bỏ chuỗi theo một vị ngữ, ví dụ:
std::remove_if (strings.begin(), strings.end(), [](const wstring &s) -> bool { return s == L"matching"; });
Khi tôi cố gắng này, tôi nhận được biên dịch sau lỗi:
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 dường như gợi ý rằng std::string
không có một hàm tạo bản sao giá trị (sẽ là bất hợp pháp). Có phải bằng cách nào đó không tốt khi sử dụng std::remove_if
với std::set
? Tôi có nên làm điều gì khác thay vì một số lần lặp lại của set::find()
theo sau là set::erase()
không?
mẫu đơn giản của bạn có thể được thay thế bởi 'strings.erase (L "phù hợp");'. Một giả định rằng vị từ * * thực tế của bạn không phải là tầm thường. –
@ Robᵩ Vâng đó chỉ là một ví dụ, tôi yêu cầu một đối tượng chức năng. – Benj