最近、boost::lambda または boost::phoenix で解決できると思われる問題に遭遇しましたが、正しい構文を取得できなかったため、別の方法で解決しました。私がやりたかったのは、特定の長さよりも短く、別のコンテナーにない「文字列」内のすべての要素を削除することでした。
これは私の最初の試みです:
std::vector<std::string> strings = getstrings();
std::set<std::string> others = getothers();
strings.erase(std::remove_if(strings.begin(), strings.end(), (_1.length() < 24 && others.find(_1) == others.end())), strings.end());
私がそれをやった方法はこれでした:
struct Discard
{
bool operator()(std::set<std::string> &cont, const std::string &s)
{
return cont.find(s) == cont.end() && s.length() < 24;
}
};
lines.erase(std::remove_if( lines.begin(), lines.end(), boost::bind<bool>(Discard(), old_samples, _1)), lines.end());