簡體   English   中英

在lower_bound上使用lambda

[英]Using lambda on lower_bound

我試圖在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語法應該是corect,為什么它總是拋出錯誤? 我嘗試添加

ar.age and br.age

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語法正確,問題是傳遞給std::lower_bound的第三個參數,比較vector<Mop>的元素(即Mop而不是int應該是值。

順便說一句: a.insert(mop,it); 應該是a.insert(it, mop);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM