This question already has an answer here:
I have the following function, in which I want to prune my std::set<QString> words
from words longer/shorter than main_word
by more than 4 characters.
void Cluster::prune(QString main_word)
{
words.erase(std::remove_if(words.begin(),
words.end(),
[=](QString w){return std::abs(main_word.length() - w.length()) > 4;}),
words.end());
}
I get the following error while building:
d:\qt\tools\mingw48_32\lib\gcc\i686-w64-mingw32\4.8.0\include\c++\bits\stl_algo.h:1176: błąd: passing 'const QString' as 'this' argument of 'QString& QString::operator=(const QString&)' discards qualifiers [-fpermissive]
*__result = _GLIBCXX_MOVE(*__first);
^
I'm a bit confused - what am I doing wrong with this lambda?
You can't use the erase remove-if idiom on sets - because a
set<K>
internally contains elements of typeconst K
- they're nonmodifiable andstd::remove_if
requires the objects to be MoveAssignable.You'll have to use a loop: