在C++; 我使用C++中的一组对象来获取插入和查找的日志(n)次。 在下面的代码中,我能够插入元素并使它们按x属性排序,但是,我不能使用lower_bound来查找基于同一属性的下限。我不知道如何解决这个问题。任何帮助都将不胜感激
我能找到的关于集合的大多数例子都不是关于一组对象的在C++; 我使用C++中的一组对象来获取插入和查找的日志(n)次。 在下面的代码中,我能够插入元素并使它们按x属性排序,但是,我不能使用lower_bound来查找基于同一属性的下限。我不知道如何解决这个问题。任何帮助都将不胜感激,c++,algorithm,set,C++,Algorithm,Set,我能找到的关于集合的大多数例子都不是关于一组对象的 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
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;
}
struct MyObject{
浮动x=0;
浮动y=0;
常量布尔运算符<(常量MyObject&r)常量{
回报率(x coutnset
存储MyObject
对象,并且下限
需要存储在集合中的一个对象。您正在传递它1.2
,它是一个双精度,但是无法从双精度构造MyObject
。因此编译失败
您需要将MyObject
传递给nset。下限
进行搜索。nset
存储MyObject
对象,下限
需要一个存储在集合中的对象。您正在传递它1.2
,这是一个双精度,但无法从中构造MyObject
因此编译失败
您需要将MyObject
传递到nset.lower\u bound
进行搜索。如果您遇到编译器错误,请发布这些错误。也就是说std::set
实现了自己的lower\u bound
函数,您应该使用它,而不是std::lower\u bound
,我现在已经编辑过,以包含compiler errors如果您遇到编译器错误,请发布这些错误。也就是说,std::set
实现了自己的lower_bound
函数,您应该使用它,而不是std::lower_bound
我现在编辑了编译器错误扫描,请详细说明如何传递MyObject?因为这并没有ork:set::迭代器it=nset.lower_-bound(MyObject(1.2));@user3134575您需要像对要添加到集合中的对象那样构造MyObject
。我想现在我明白您的意思了。我只需要构造另一个对象,如n3,并且n3.x=1.2,然后将其传递给函数。谢谢,这确实有效。您能详细说明一下如何传递MyObject吗?因为这样做了不工作:set::iterator it=nset.lower_-bound(MyObject(1.2))@user3134575您需要构造MyObject
,就像您为添加到集合中的对象所做的那样。我想现在我明白了您的意思。我只需要构造另一个像n3这样的对象,并且具有n3.x=1.2,然后将其传递给函数。谢谢,这确实有效。
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;
}