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);

cout
std::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