请参阅以下代码段:
typedef boost::tuple<std::string, int, std::string> TUPLE;
std::map<int, TUPLE> m;
std::find_if
(
m.begin(),
m.end(),
boost::lambda::bind
(
&std::map<int, TUPLE>::value_type::second_type::head,
boost::lambda::bind
(
&std::map<int, TUPLE>::value_type::second,
boost::lambda::_1
)
)
==
"someString"
);
我正在尝试为find_if(使用boost lambda)创建谓词,并将元组的第一个元素与字符串进行比较。但是,有没有办法使这项工作像:
typedef boost::tuple<std::string, int, std::string> TUPLE;
std::map<int, TUPLE> m;
std::find_if
(
m.begin(),
m.end(),
boost::lambda::bind
(
&std::map<int, TUPLE>::value_type::second_type::get<0>,
boost::lambda::bind
(
&std::map<int, TUPLE>::value_type::second,
boost::lambda::_1
)
)
==
"someString"
);
我将second_type :: head更改为second_type :: get&lt; 0&gt;但它没有编译。 我正在尝试创建谓词,将元组的第一个或第二个元素与某个字符串进行比较。
这是我得到的错误之一:
错误29错误C2780:'const boost :: lambda :: lambda_functor&gt;,detail :: bind_tuple_mapper :: type&gt;&gt; boost :: lambda :: bind(const Arg1&amp;)':需要1个参数 - 提供2个
有没有办法专门比较元组的第n个元素? (不只是头部) 我尝试将元组元素表示为struct并且它可以工作但是如果有一种方法可以使用元组,我将不胜感激。
附注:由于编译器版本,我无法使用[](){}
表示法。
答案 0 :(得分:2)
好的我不知道有关提升但是C ++ 11 lambdas会如下:
typedef std::tuple<std::string, int, std::string> TUPLE;
std::map<int, TUPLE> m;
std::find_if(m.begin(), m.end(), [] (const std::pair<int, TUPLE>& v) {
return v.second.get<1>() == "someString";
});
从增强文档中猜测,这将是:
std::find_if(m.begin(), m.end(),
return boost::lambda::_1.second.second == "someString");