首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lower_bound上使用lambda

在lower_bound上使用lambda
EN

Stack Overflow用户
提问于 2016-05-14 00:15:58
回答 2查看 2.4K关注 0票数 2

我正在尝试在c++的lower_bound上使用lambda。我已经定义了一个结构

代码语言:javascript
复制
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;
    }
};

和添加函数

代码语言:javascript
复制
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的错误:

代码语言:javascript
复制
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语法应该是正确的,为什么它一直抛出错误?我试着添加

代码语言:javascript
复制
ar.age and br.age

到lambda也不起作用。

这个lambda怎么了?

EN

回答 2

Stack Overflow用户

发布于 2016-05-14 00:22:03

您创建了mop对象以用作比较键,但是您传递的是代表“原始”年龄的aa

代码语言:javascript
复制
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

应该是

代码语言:javascript
复制
auto it = lower_bound(a.begin(), a.end(), mop, [](const Mop &ar, const Mop &br){ return ar < br;});
//                                        ^^^
a.insert(it, mop);
//       ^^  ^^^

Demo.

票数 3
EN

Stack Overflow用户

发布于 2016-05-14 00:22:46

lambda语法是正确的,问题是传递给std::lower_bound的第三个参数,比较vector<Mop>的元素应该是有价值的,即Mop,而不是int

顺便说一句:a.insert(mop,it);应该是a.insert(it, mop);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37214802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档