#include <unordered_set>
class Point
{
public:
struct Hash
{
size_t operator()(Point const & x) const noexcept
{
return (
(51 + std::hash<int>()(x.getX())) * 51 +
std::hash<int>()(x.getY())
);
}
};
Point(int x, int y) : x_(x), y_(y) {}
int getX() const { return x_; }
int getY() const { return y_; }
bool operator==(Point const & rhs) const
{
return x_ == rhs.getX() &&
y_ == rhs.getY();
}
bool operator!=(Point const & rhs) const { return !(*this == rhs); }
private:
int x_, y_;
};
typedef std::unordered_set<Point, Point::Hash> PointSet;
int main()
{
PointSet x;
x.insert(Point(1,2));
return 0;
}
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CgpjbGFzcyBQb2ludAp7CiAgICBwdWJsaWM6CgkJc3RydWN0IEhhc2gKCQl7CgkJCXNpemVfdCBvcGVyYXRvcigpKFBvaW50IGNvbnN0ICYgeCkgY29uc3Qgbm9leGNlcHQKCQkJewoJCQkJcmV0dXJuICgKCQkJCQkoNTEgKyBzdGQ6Omhhc2g8aW50PigpKHguZ2V0WCgpKSkgKiA1MSArCgkJCQkJc3RkOjpoYXNoPGludD4oKSh4LmdldFkoKSkKCQkJCSk7CgkJCX0KCQl9OwoJCQoJCVBvaW50KGludCB4LCBpbnQgeSkgOiB4Xyh4KSwgeV8oeSkge30KCQkKCQlpbnQgZ2V0WCgpIGNvbnN0IHsgcmV0dXJuIHhfOyB9CgkJaW50IGdldFkoKSBjb25zdCB7IHJldHVybiB5XzsgfQoJCQoJCWJvb2wgb3BlcmF0b3I9PShQb2ludCBjb25zdCAmIHJocykgY29uc3QgCgkJewoJCQlyZXR1cm4geF8gPT0gcmhzLmdldFgoKSAmJgoJCQkJeV8gPT0gcmhzLmdldFkoKTsKCQl9CgkJCgkJYm9vbCBvcGVyYXRvciE9KFBvaW50IGNvbnN0ICYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KCQkKCXByaXZhdGU6CgkJaW50IHhfLCB5XzsKfTsKCnR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfc2V0PFBvaW50LCBQb2ludDo6SGFzaD4gUG9pbnRTZXQ7CgppbnQgbWFpbigpCnsKCVBvaW50U2V0IHg7Cgl4Lmluc2VydChQb2ludCgxLDIpKTsKCXJldHVybiAwOwp9