一、题目
二、多关键字排序
- 定义数据结构体
- 定义比较结构体
- 定义容器
- 插入数据
- 排序
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
//定义数据结构体
struct Data {
int ind;
double dis;
};
//定义比较结构体
struct cmp {
bool operator()(const Data& d1, const Data& d2) {
if (d1.dis < d2.dis) return true;
else if (d1.dis == d2.dis) {
if (d1.ind < d2.ind) return true;
}
return false;
}
};
int n, X, Y;
int xi, yi;
//定义容器
vector<Data> v;
int main()
{
//插入数据
cin >> n >> X >> Y;
for (int i = 1; i <= n; i++) {
cin >> xi >> yi;
Data d;
d.ind = i;
d.dis = sqrt(pow(xi - X, 2) + pow(yi - Y, 2));
v.push_back(d);
}
//排序
sort(v.begin(), v.end(), cmp());
for (vector<Data>::iterator it = v.begin(); it != v.end(); it++) {
cout << (*it).ind << " " << (*it).dis << endl;
}
return 0;
}
输入:
5 0 1
-1 0
0 0
1 0
0 2
-1 2
输出:
2 1
4 1
1 1.41421
3 1.41421
5 1.41421
三、代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
struct Data {
int ind;
double dis;
};
struct cmp {
bool operator()(const Data& d1, const Data& d2) {
if (d1.dis < d2.dis) return true;
else if (d1.dis == d2.dis) {
if (d1.ind < d2.ind) return true;
}
return false;
}
};
int n, X, Y;
int xi, yi;
vector<Data> v;
int main()
{
cin >> n >> X >> Y;
for (int i = 1; i <= n; i++) {
cin >> xi >> yi;
Data d;
d.ind = i;
d.dis = sqrt(pow(xi - X, 2) + pow(yi - Y, 2));
v.push_back(d);
}
sort(v.begin(), v.end(), cmp());
for (vector<Data>::iterator it = v.begin(); it != v.begin() + 3; it++) {
cout << (*it).ind << endl;
}
return 0;
}
输入:
5 0 1
-1 0
0 0
1 0
0 2
-1 2
输出:
2
4
1