8

オブジェクト Point2D を Point2D セットに挿入しようとしていますが、挿入できません。セットは int と char では機能しますが、オブジェクトでは機能しないようです。

オブジェクトをセットに挿入する方法を知りたいのですが??? x値の昇順で並べ替えたいと仮定します

class Point2D
{
public:
    Point2D(int,int);
    int getX();
    int getY();

    void setX(int);
    void setY(int);

    double getScalarValue();

protected:
    int x;
    int y;
    double distFrOrigin;
    void setDistFrOrigin();
};


int main()
{
    Point2D abc(2,3);

    set<Point2D> P2D;
    P2D.insert(abc); // i am getting error here, i don't know why
}
4

3 に答える 3

2

std::set がサポートしているため、C++ 11 以降で順序を定義するより良い方法は、カスタム ファンクターを使用することだと思います。

set<set>が次のようにヘッダーで定義されていることがわかります。

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;

したがって、たとえば x に基づいて比較するには、次のようにします。

struct Point2DCmp
{
    bool operator() (Point2D& p1, Point2D& p2)
    {
        return p1.getX() < p2.getX();
    }
}

set<Point2D, Point2DCmp> P2D;
于 2015-02-05T01:58:02.667 に答える