Edge::Edge(Vertex v1, Vertex v2, float initialCost)
{
if (v1.getId() < v2.getId()) {
_v1 = v1;
_v2 = v2;
} else {
_v1 = v2;
_v2 = v1;
}
_cost = initialCost;
}
以及定义为这样的
bool operator
return (lhs._v1.getId() != rhs._v1.getId() || lhs._v2.getId() != rhs._v2.getId()) && lhs._cost < rhs._cost;
}
下面是顶点类的布局
Vertex::Vertex(int id)
{
// _position = position;
_id = id;
}
int Vertex::getId() {
return _id;
}
set test = set();
Vertex v0 = new Vertex(0);
Vertex v1 = Vertex(1);
Vertex v2 = Vertex(2);
Vertex v3 = Vertex(3);
Vertex v4 = Vertex(4);
Vertex v5 = Vertex(5);
Edge e1(v0, v1, 0.2);
Edge e2(v1, v2, 0.4);
Edge e3(v2, v3, 0.7);
Edge e4(v3, v4, 0.6);
Edge e5(v4, v3, 0.6);
Edge e6(v4, v5, 0.3);
Edge e7(v4, v1, 0.4);
test.insert(e1);
test.insert(e2);
test.insert(e3);
test.insert(e4);
test.insert(e5);
test.insert(e6);
test.insert(e7);
Edge e(v1, v2, 0.0);
cout << "ERASING" << endl;
test.erase(e);
cout << "DONE" << endl;
我希望底部的erase语句只会从集合中删除e2。我想要的行为是能够基于顶点删除集合中的元素,而不必指定它们的成本值。
实际上,除了e3和e4之外的所有边都从集合中移除了。如果我不调用erase,我将得到预期的行为(只有那些顶点相同的边才被认为是重复的)。为什么会这样?