[英]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.