C++ 为集合的唯一项重写less运算符时出现的问题
我有一个包含三个成员变量的类C++ 为集合的唯一项重写less运算符时出现的问题,c++,set,C++,Set,我有一个包含三个成员变量的类 Edge::Edge(Vertex v1, Vertex v2, float initialCost) { if (v1.getId() < v2.getId()) { _v1 = v1; _v2 = v2; } else { _v1 = v2; _v2 = v1; } _cost = initialCost; } 我正在以下面的方式实现它 set
Edge::Edge(Vertex v1, Vertex v2, float initialCost)
{
if (v1.getId() < v2.getId()) {
_v1 = v1;
_v2 = v2;
} else {
_v1 = v2;
_v2 = v1;
}
_cost = initialCost;
}
我正在以下面的方式实现它
set<Edge> test = set<Edge>();
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;
set test=set();
顶点v0=新顶点(0);
顶点v1=顶点(1);
顶点v2=顶点(2);
顶点v3=顶点(3);
顶点v4=顶点(4);
顶点v5=顶点(5);
边缘e1(v0,v1,0.2);
边缘e2(v1,v2,0.4);
边缘e3(v2,v3,0.7);
边缘e4(v3,v4,0.6);
边缘e5(v4,v3,0.6);
边缘e6(v4、v5、0.3);
边缘e7(v4,v1,0.4);
测试插入(e1);
试验.插入物(e2);
试验.插入物(e3);
试验.插入物(e4);
测试插入(e5);
试验.插入件(e6);
试验.插入物(e7);
边e(v1,v2,0.0);
coutstd::set
需要您的操作员
getId()|左下角v2->getId()!=rhs.\U v2->getId())&lhs.\U成本
对于其\u v1
具有不同id的任何两个边
返回true
。唯一容器的比较运算符必须满足严格弱排序的所有要求。为了过分简化主要需求,严格的弱排序意味着:1)如果a请发布一个。强调最小化std::swap
会有所帮助here@John我的错,我已经修好了。这不是真正的问题。
Vertex::Vertex(int id)
{
// _position = position;
_id = id;
}
int Vertex::getId() {
return _id;
}
set<Edge> test = set<Edge>();
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;
bool operator<(const Edge &lhs, const Edge &rhs) {
return (lhs._v1->getId() != rhs._v1->getId() || lhs._v2->getId() != rhs._v2->getId()) && lhs._cost < rhs._cost;
}
Edge v1->getId() v2->getId() cost
A: 1 2 10
B: 3 4 11
C: 1 2 12