ベクトルをセットにコピーするだけで、std::copy と挿入イテレータを使用できます。何かのようなもの:
std::copy(s_vector.begin(), s_vector.end(), std::inserter(s_set, s_set.end()));
もちろん、これは boost::lambda をまったく使用していないため、これを一般化してやりたいことを実行するのにはおそらく役立ちません。ここで何をしようとしているのかをもっと知っておくとよいでしょう。lambda::_if についてのあなたの言及に基づいて、セットに挿入する前に、ラムダが入力ベクトルの何らかのフィルタリングを行うと仮定します。
次の (完全でテスト済みの) 例は、ベクターから 4 文字以下の文字列のみをセットにコピーする方法を示しています。
#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 は 2 つの異なる獣であるという上記のポイントを繰り返します。概念的には似ていますが、異なるタイプの出力を生成します。後者のみが他のラムダ演算子と組み合わせることができます。