要将向量复制到集合中,可以使用 std::copy 和插入迭代器。就像是:
std::copy(s_vector.begin(), s_vector.end(), std::inserter(s_set, s_set.end()));
当然,这根本不使用 boost::lambda,因此它可能无法帮助您将其概括为做您想做的事情。最好更多地了解您在这里尝试做的事情。根据您对 lambda::_if 的提及,我将假设您的 lambda 将在插入集合之前对输入向量进行某种过滤。
以下(完整的,经过测试的)示例显示了如何仅将 <= 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 是两种不同的野兽。从概念上讲,它们是相似的,但它们产生不同类型的输出。只有后者可以与其他 lambda 运算符结合使用。