我正在使用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;
}
答案 0 :(得分:4)
nset
存储MyObject
个对象,而lower_bound
需要存储在集合中的东西之一。您正在传递1.2
,它是一个double,但是无法从double构造一个MyObject
。因此编译失败。
您需要将MyObject
传递到nset.lower_bound
进行搜索。