为什么运算符重载不适用于用户定义数据类型的stl容器?

问题描述 投票:0回答:1

我只想将myData对象存储在一组中。需要根据重载的运算符对对象进行排序

struct myData
{
    int value;
    myData(int value)
    {
        this->value=value;
    }

    bool operator<(myData b)
    {
        return this->value < b.value;
    }
};

int main()
{
    set<myData> s;
    s.insert(myData(10));
    s.insert(myData(50));
    s.insert(myData(40));
    s.insert(myData(30));
    s.insert(myData(20));
    print_set(s);
}

我知道我可以将自定义比较器创建为函数对象。

struct comp
{
    bool operator()(const myData &lhs, const myData &rhs) const{
        return lhs.value<rhs.value;
    }
};

并将其用作:

set<myData,comp> s;

但是运算符重载呢?我在这里做错什么了吗?

c++ stl operator-overloading comparator
1个回答
0
投票

添加const关系运算符应该可以解决该问题。另外,我建议向您的班级添加copy ctor

我在这里提供示例:

struct myData
{
  int value;
  myData(int value) : value(value) { }
  myData(const myData &b) : value(b.value) { }
 ~myData(void) { }
  bool operator<(const myData &b) const { return (value < b.value); }
};
© www.soinside.com 2019 - 2024. All rights reserved.