如何创建与std set copy assignment一起使用的自定义类?

时间:2016-03-26 15:47:58

标签: c++ stl

我尝试创建一个与std::set一起使用的自定义类。我知道我需要为它提供一个自定义比较器,所以我重载了operator<。但是当我尝试使用代码set<Edge> a; set<Edge> b = a;复制集合时, 我收到以下错误:

  

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c ++ / v1 / __ functional_base:63:21:二进制表达式的操作数无效('const Edge'和'const Edge')

class Edge {
public:
    Edge(int V, int W, double Weight):v(V),w(W),weight(Weight){}
    int other(int vertex){ return v ? w : vertex == w;}
    int v,w;
    double weight;
    friend std::ostream& operator<<(std::ostream& out, const Edge& e)
    {
        out<<e.v<<' '<<e.w<<' '<<"weight:"<<e.weight<<'\n';
        return out;
    }
    bool operator<(const Edge& other)
    {
        return weight < other.weight;
    }
};

1 个答案:

答案 0 :(得分:5)

制作

bool operator<(const Edge& other) const

因为比较运算符必须标记为conststd::set中的密钥为const,因此operator<实例上会调用const,因此必须将其标记为const