Чтобы просто скопировать вектор в набор, вы можете использовать std :: copy и итератор вставки. Что-то вроде:
std::copy(s_vector.begin(), s_vector.end(), std::inserter(s_set, s_set.end()));
Конечно, это вообще не использует boost :: lambda, так что, вероятно, это не поможет вам обобщить это и сделать то, что вы хотите. Было бы лучше узнать больше о том, что вы пытаетесь сделать здесь. Исходя из вашего упоминания о lambda :: _ if, я предполагаю, что ваша лямбда будет выполнять некоторую фильтрацию входного вектора перед вставкой в набор.
Следующий (полный, проверенный) пример показывает, как копировать в набор только строки длиной <= 4 символа из вектора: </p>
#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;
}
Надеюсь, это даст вам что-то для продолжения?
Также позвольте мне повторить высказанное выше замечание, что boost :: bind и boost :: lambda :: bind - это два разных зверя. Концептуально они похожи, но они дают результаты разных типов. Только последние могут быть объединены с другими лямбда-операторами.