Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下界上使用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 - Fatal编程技术网

在下界上使用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 我尝试在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); // ^^^ ^^

对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);
//       ^^^ ^^
// 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);
//       ^^  ^^^