我正在尝试在c++的lower_bound上使用lambda。我已经定义了一个结构
struct Mop{
Mop( string n, int a){
name = n;
age = a;
}
string name;
int age;
bool operator < ( const Mop&a) const {
return age < a.age;
}
};和添加函数
void AddVector(vector<Mop> &a, string n , int aa){
Mop mop(n,aa);
auto it = lower_bound(a.begin(), a.end(), aa , [](const Mop &ar, const Mop &br){ return ar < br;});
a.insert(mop,it);
}
int main()
{
vector<Mop> a;
AddVector(a,"John",15);
AddVector(a,"Swan",10);
return 0;
}但是它一直抛出关于lambda的错误:
error: no matching function for call to 'lower_bound(std::vector<Mop>::iterator, std::vector<Mop>::iterator, int&, AddVector(std::vector<Mop>&, std::string, int)::__lambda0)'我一直在寻找,lambda语法应该是正确的,为什么它一直抛出错误?我试着添加
ar.age and br.age到lambda也不起作用。
这个lambda怎么了?
发布于 2016-05-14 00:22:03
您创建了mop对象以用作比较键,但是您传递的是代表“原始”年龄的aa:
auto it = lower_bound(a.begin(), a.end(), aa , [](const Mop &ar, const Mop &br){ return ar < br;});
// ^^
a.insert(mop,it);
// ^^^ ^^
// Arguments are swapped应该是
auto it = lower_bound(a.begin(), a.end(), mop, [](const Mop &ar, const Mop &br){ return ar < br;});
// ^^^
a.insert(it, mop);
// ^^ ^^^Demo.
发布于 2016-05-14 00:22:46
lambda语法是正确的,问题是传递给std::lower_bound的第三个参数,比较vector<Mop>的元素应该是有价值的,即Mop,而不是int。
顺便说一句:a.insert(mop,it);应该是a.insert(it, mop);。
https://stackoverflow.com/questions/37214802
复制相似问题