在C++中对一组对象使用lower_bound()
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"answers"double")第二个下界的编译器错误表示:调用"lower_bound"没有匹配的成员函数
编辑:而用户提供的答案:1201ProgramAlarm对我理解和修复错误很有帮助。我仍然认为在我的情况下,有一个接受浮点而不是对象的下界函数更方便。因此,我实现了以下功能来帮助我实现这一点。复制如下,以防其他人感兴趣:
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
才能进行搜索。
相关文章:
- 空集"Out of bound iterator"
- 将张量的"lower diagonal"映射到矩阵,作为将矩阵的下三角形部分提取到向量的推广
- 为什么<<低;和 cout<<v.begin;单独给出错误,但 cout <<(lower.begin());没有给出任何错误,并使代码易于编译
- 使用多个文件时"array bound is not an integer constant before ']' token"
- "A reference may be bound only to an object",为什么"const int &ref = 3;"有效?
- 如何修复"reference cannot be bound to dereferenced null pointer"警告
- 当你有一个像 ::lower 这样的参数时,这在C++中是什么意思
- GCC 检测"subindex out of bound"错误
- 如果我没有得到分段错误,如何找到"index out of bound"
- 一个程序将字符串Upper char更改为Lower char得到错误
- std:: lower的行为在不同的语言环境中是如何变化的?
- 在main中声明Array之前,Array bound不是整型常量
- 获取错误"array bound is not an integer constant before ']' token"
- 如何在C或c++中获得与Java中的toLowerCase或Python中的string.lower()相同的结果
- 在运行时创建结构时"array bound is not an integer constant"