我想创建一个find函数,它根据给定的lambda表达式工作并匹配给定的字符(变化)。 我尝试使用lambda表达式,但lambda表达式中的匹配是一个常量字符。我无法根据自己的意愿改变lambda表达式。
我有vector < pair <char, char> > r
。
我想做的是,
运行此向量,查看是否有r[i].second
与我的给定角色匹配。在这里,给定的字符是字符串的一部分,因此随着迭代而改变,所以我无法在lambda表达式中修复它,也不能将参数传递给lambda表达式来解决这个问题。
bool findfn (pair <char, char> x)
{
return x.second == mychar // I want to pass mychar as argument
}
一种可能性是使用lambda表达式,这在vincentp的答案中有解释。我们也可以使用上面显示的findfn
来做吗?调用代码如下所示:
find(r.begin(), r.end(), findfn)
答案 0 :(得分:4)
您可以创建lambda并捕获lambda捕获列表中的char mychar = 'A';
// ...
auto findfn = [mychar](pair<char, char> x) -> bool { return x.second == mychar; };
变量:
reg_date varchar(20)
答案 1 :(得分:2)
如果我理解正确,那么std::bind
可以解决您的问题。它基本上采用一个函数,将某些值绑定到某些参数并返回一个期望更少参数的函数。
例如:
#include <functional>
//...
auto findfn = [](pair<char,char> x, char mychar) { return x.second == mychar };
char yourchar = 'a';
find_if(r.begin(), r.end(), std::bind(findfn, std::placeholder::_1, yourchar));
编辑:在我的辩护中,你声明你要传递一个额外的参数。如果您可以使用捕获列表,当然这会更容易,但使用std::bind
的方法更为通用。
答案 2 :(得分:1)
您可以编写一个接受mychar
的函数并返回一个使用mychar
的lambda函数:
std::function<bool(std::pair<char, char>)> findFor(char mychar)
{
return [mychar](std::pair<char, char> x) { return x.second == mychar; };
}
it = find_if(r.begin(), r.end(), findFor('a'));