如何将用户定义的对象插入 STL 集中?

新手上路,请多包涵

我正在尝试将对象 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
}

原文由 Computernerd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 358
2 个回答

您需要为您的班级实现 operator< 重载。例如,在您的课堂上,您可以执行以下操作:

 friend bool operator< (const Point2D &left, const Point2D &right);

然后,在你的课外:

 bool operator< (const Point2D &left, const Point2D &right)
{
    return left.x < right.x;
}

_编辑_:正如 Retired Ninja 所建议的,您也可以在您的班级中将其实现为常规成员函数:

 bool operator< (const Point2D &right) const
{
    return x < right.x;
}

原文由 Carlos Sanchez 发布,翻译遵循 CC BY-SA 3.0 许可协议

std::set<T> 要求 std::less<T> 已知为值类型 T 。这样它就可以对其元素进行排序,这是其内部工作方式的基础。

通过定义 bool operator<(const Point2D&, const Point2D&) 来解决这个问题,只要它满足 Strict Weak Ordering 就可以使用您选择的任何逻辑。

这是类型的要求,但是一旦你完成了这个,你就可以开始了。

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题