[英]Using lower_bound() with a set of objects in C++
我在C ++中使用一组对象来获取插入和查找的log(n)次。 在下面的代码中,我能够插入元素并使它们按x属性排序,但是,我无法使用lower_bound来基于同一属性查找下限。 我不知道该如何解决。 任何帮助将不胜感激。
我能找到的关于集合的大多数示例都不是关于一组对象的
struct MyObject {
float x = 0;
float y = 0;
const bool operator < ( const MyObject &r ) const{
return ( x< r.x);
}
};
set<MyObject> nset;
int main(){
MyObject n1;
n1.x=5;
n1.y=1;
MyObject n2;
n2.x=3;
n2.y=2;
nset.insert(n1);
nset.insert(n2);
// this works, the elementes are sorted according to x
for(auto elem: nset){
cout << elem.x << endl;
}
// this doesn't work
set<MyObject>::iterator it = lower_bound(nset.begin(), nset.end(), 1.2);
cout << it->x << endl;
//neither this one
// set<MyObject>::iterator it = nset.lower_bound(1.2);
// cout << it->x << endl;
cout << "hello" << endl;
return 0;
}
我希望下限函数将我指向对象集中的下限“ x”,但是代码无法编译。 编译器错误的第一个下限表示:二进制表达式的无效操作数(“ const MyObject”和“ double”)编译器错误的第二个下限表示:没有匹配的成员函数可用于调用“ lower_bound”
编辑:虽然用户提供的答案:1201ProgramAlarm对我理解和修复错误非常有帮助。 我仍然认为,在我的情况下,具有一个lower_bound函数来接受浮点数而不是对象会更方便。 因此,我实现了以下功能来帮助我实现这一目标。 如果其他人感兴趣,请复制以下内容:
set<MyObject>::iterator mylower_bound(set<MyObject> &myset, float val){
MyObject f;
f.x = val;
set<MyObject>::iterator it = myset.lower_bound(f);
return it;
}
nset
存储MyObject
对象,并且lower_bound
需要存储在集合中的东西之一。 您将其传递给1.2
,它是一个double,但是无法从double构造MyObject
。 从而编译失败。
您需要将MyObject
传递给nset.lower_bound
进行搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.