在下界上使用lambda 我尝试在C++中使用Limbda来进行下限绑定。我已经定义了一个结构 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; } };
对lambda也不起作用 这个lambda有什么问题?您创建了mop对象用作比较键,但您传递的是aa,它表示原始年龄:在下界上使用lambda 我尝试在C++中使用Limbda来进行下限绑定。我已经定义了一个结构 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; } };,c++,c++11,lambda,C++,C++11,Lambda,对lambda也不起作用 这个lambda有什么问题?您创建了mop对象用作比较键,但您传递的是aa,它表示原始年龄: auto it = lower_bound(a.begin(), a.end(), aa , [](const Mop &ar, const Mop &br){ return ar < br;}); // ^^ a.insert(mop,it); // ^^^ ^^
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);
// ^^ ^^^
lambda语法正确,问题是传递给的第三个参数,它应该是比较向量元素的值,即Mop,而不是int
顺便说一句:a.insertmop,it;应该是a.insertit,mop 你们包括算法吗?什么编译器?一旦将mop传递到lower_bound,并交换要插入的参数,它就会使用cpp.sh:cpp.sh/3ucf4将lambda拉出到一个单独的命名变量中,使行长度保持较低。在vector::insert中,迭代器首先注意lambda是冗余的,因为它将执行与默认比较器相同的操作。调用可以是下限a.begin、a.end、mop@这是一个不同但非常相似的错误-您交换了insert的args,它应该是a.insertit,mop@本贾明林德利:在这个例子中是这样的,但我强烈怀疑OP在发布到SO之前是在简化他的问题。这是一件好事。
ar.age and br.age
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);
// ^^ ^^^