gpt4 book ai didi

c++ - 在 C++ 中将 lower_bound() 与一组对象一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:06 25 4
gpt4 key购买 nike

我在 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 对我理解和修复错误很有帮助。我仍然认为在我的例子中有一个接受 float 而不是对象的 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 需要set 中存储的事物之一。您传递给它 1.2,这是一个 double ,但无法从 double 构造一个 MyObject。因此编译失败。

您需要将 MyObject 传递给 nset.lower_bound 以进行搜索。

关于c++ - 在 C++ 中将 lower_bound() 与一组对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com