Pour copier uniquement le vecteur dans l'ensemble, vous pouvez utiliser std :: copie et un itérateur d'insertion. Quelque chose comme:
std::copy(s_vector.begin(), s_vector.end(), std::inserter(s_set, s_set.end()));
Bien sûr, cela ne veut pas utiliser boost :: lambda du tout, donc il ne probablement pas vous aider à faire généraliser ce que vous voulez. Il serait préférable d'en savoir plus sur ce que vous essayez de faire ici. Je vais supposer, d'après votre mention de lambda :: _ if, que votre lambda va faire une sorte de filtrage du vecteur d'entrée avant de l'insérer dans l'ensemble.
L'exemple suivant (complet, testé) montre comment copier uniquement les chaînes qui sont < = 4 caractères du vecteur dans l'ensemble:
#include <boost/assign/list_of.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/test/minimal.hpp>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
using namespace boost::lambda;
using namespace boost::assign;
int test_main(int argc, char* argv[])
{
vector<string> s_vector = list_of("red")("orange")("yellow")("blue")("indigo")("violet");
set<string> s_set;
// Copy only strings length<=4 into set:
std::remove_copy_if(s_vector.begin(), s_vector.end(), std::inserter(s_set, s_set.end()),
bind(&string::length, _1) > 4u);
BOOST_CHECK(s_set.size() == 2);
BOOST_CHECK(s_set.count("red"));
BOOST_CHECK(s_set.count("blue"));
return 0;
}
Espérons que cela vous donne quelque chose à aller? Je voudrais aussi réitérer le point ci-dessus que boost :: bind et boost :: lambda :: bind sont deux bêtes différentes. Conceptuellement, ils sont similaires, mais ils produisent des sorties de différents types. Seul ce dernier peut être combiné avec d'autres opérateurs lambda.
J'essayais de le faire, mais je ne trouvais pas la bonne combinaison de typedefs et de distributions statiques à utiliser. Cela ressemble à cela fera exactement ce que je veux, bien que je vais probablement utiliser une solution légèrement plus simple similaire à celle fournie par Alastair ci-dessus. C'est l'une des underbellies de boost :: lambda. :( –