java operator.less_为集合的唯一项重写less运算符时出现的问题

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,我将得到预期的行为(只有那些顶点相同的边才被认为是重复的)。为什么会这样?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值