我尝试创建一个与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;
}
};
答案 0 :(得分:5)
制作
bool operator<(const Edge& other) const
因为比较运算符必须标记为const
。 std::set
中的密钥为const
,因此operator<
实例上会调用const
,因此必须将其标记为const
。