我试图在c ++中的lower_bound上使用lambda。我已经定义了一个struct
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语法应该是corect,为什么它会继续抛出错误?我尝试添加
ar.age and br.age
到lambda也没有工作。
这个lambda怎么了?
答案 0 :(得分:2)
您创建了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);
// ^^ ^^^
答案 1 :(得分:0)
lambda语法是正确的,问题是传递给std::lower_bound
的第三个参数,它应该是比较vector<Mop>
的元素的值,即Mop
,而不是int
{1}}。
BTW:a.insert(mop,it);
应为a.insert(it, mop);
。