Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ set::find()不使用用户定义的数据类型_C++_Stdset - Fatal编程技术网

C++ set::find()不使用用户定义的数据类型

C++ set::find()不使用用户定义的数据类型,c++,stdset,C++,Stdset,当我搜索一个不在我的集合中的键时,find而不是return iterator to end将迭代器返回给另一个不等于key但在集合中存在的对象 我不知道出了什么问题 代码 当比较相等或不相等的对象时,使用比较函数,即更大,它使用node::operator>而不是node::operator==如您所期望的那样 在不精确的术语中,如果两个对象a和b的比较都不小于另一个,则认为它们是等效的:!康帕,b&!康普,a 对于节点3,6和节点0,3,运算符>节点3,6,节点0,3和运算符>节点0,3,节

当我搜索一个不在我的集合中的键时,find而不是return iterator to end将迭代器返回给另一个不等于key但在集合中存在的对象

我不知道出了什么问题

代码


当比较相等或不相等的对象时,使用比较函数,即更大,它使用node::operator>而不是node::operator==如您所期望的那样

在不精确的术语中,如果两个对象a和b的比较都不小于另一个,则认为它们是等效的:!康帕,b&!康普,a


对于节点3,6和节点0,3,运算符>节点3,6,节点0,3和运算符>节点0,3,节点3,6都返回false,那么它们被认为是等效的。

当比较对象是否相等时,使用比较函数,即更大的函数,它使用node::operator>而不是node::operator==如您所期望的那样

在不精确的术语中,如果两个对象a和b的比较都不小于另一个,则认为它们是等效的:!康帕,b&!康普,a


对于node3,6和node0,3,操作符>node3,6,node0,3和操作符>node0,3,node3,6都返回false,那么它们被认为是等价的。

Oh!这意味着在我的情况下,所有具有相同差异的值都会被认为是相同的吗?这意味着在我的情况下,所有具有相同差异的值都会被认为是相同的吗?
class node{
public:
    int a, b;
    node(int a, int b):a(a), b(b){}

    bool operator>(const node &ob)const{
        return (this->b - this->a) > (ob.b - ob.a);     
    }

    bool operator==(const node &ob)const{
        return ((this->a == ob.a) && (this->b == ob.b));
    }
};

void print(set<node,greater<node>> &s){
    cout << "[ ";
    for(const node &ob: s){
        cout << "(" << ob.a << "," << ob.b << ") ";
    }

    cout <<"]\n--------------------------------" << endl;
}
set<node,greater<node>> s;                  
int main(){
    s.insert(node(0,3));
    s.insert(node(3,8));
    print(s);
    s.erase(node(3,8));
    cout << "After erasing (3, 8)" << endl;
    print(s);
    cout << "Searching for key (3,6)" << endl;
    set<node,greater<node>>::iterator i = s.find(node(3,6));
    if(i == s.end()){
        cout << "Not Found" << endl;
    }else{
        cout << "Found : " << "(" << i->a << "," << i->b << ")" << endl;
    }
    return 0;
}
[ (3,8) (0,3) ]
--------------------------------
After erasing (3, 8)
[ (0,3) ]
--------------------------------
Searching for key (3,6)
Found : (0,3)