#Z3021. set 和结构体练习
set 和结构体练习
#include <iostream>
#include <set>
using namespace std;
int main() {
return 0;
}
用set来储存一个二维坐标系上的点的集合。
- 首先使用定义一个用来储存点的结构体Point,里面有两个成员变量,分别用来存 X 坐标和 Y坐标。 在main函数的上方写下
struct Point {
int x, y;
};
- 给这个结构体添加<的运算符重载,让编译器知道该怎么对这个结构体比较大小。 在结构体里int x, y;下面接着写下
bool operator<(const Point &rhs) const {
if (x == rhs.x) {
return y < rhs.y;
} else {
return x < rhs.x;
}
}
如果两个点的x相同,也就是x == rhs.x,那么我们用y来比较,否则就直接比较x,这一点和用sort排序其实是一样的原理。
- 定义一个储存点的容器,然后从标准输入输入一个整数 n,然后从标准输入输入 n 个点存储到set中。 在main函数里面写下
int n;
set<Point> v;
cin >> n;
for (int i = 0; i < n; i++) {
Point temp;
cin >> temp.x >> temp.y;
v.insert(temp);
}
- 输出集合中的点。 还记得->运算符吗?it->x和(*it).x的效果是一样的,就是获取迭代器it指向的结构体里x变量的值。 最后输出的点的个数可能和输入的不一样,因为如果重复加入一个点是没有效果的哦。 继续在上一步代码后面写下
for (set<Point>::iterator it = v.begin(); it != v.end(); it++) {
cout << it->x << " " << it->y << endl;
}
点击 运行,然后输入如下数据查看效果。
6
5 6
1 2
2 1
3 4
1 2
1 1