J'ai récemment rencontré un problème que je pensais boost :: lambda ou boost :: phoenix pourrait aider à résoudre, mais je n'ai pas pu obtenir la syntaxe droite et donc je l'ai fait d'une autre manière. Ce que je voulais faire était de supprimer tous les éléments dans les "chaînes" qui étaient inférieures à une certaine longueur et non dans un autre conteneur.Boost phoenix ou lambda problème de bibliothèque: suppression d'éléments d'un vecteur std ::
Ceci est mon premier essai:
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());
Comment j'ai fini par le faire était le suivant:
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());
Dans votre « a fini par faire » extrait de code, il n'y a pas besoin de Bind Boost. Passez simplement l'ensemble (référence) au constructeur Discard. –