题目描述
给定N个三元组(x, y, z),其中x是整数,y是浮点数,z是字符串。
请你按照x从小到大的顺序将这些三元组打印出来。
数据保证不同三元组的x值互不相同。
输入格式
第一行包含整数N。
接下来N行,每行包含一个整数x,一个浮点数y,一个字符串z,表示一个三元组,三者之间用空格隔开。
输出格式
共N行,按照x从小到大的顺序,每行输出一个三元组。
注意,所有输入和输出的浮点数y均保留两位小数。
数据范围
1≤N≤10000,
1≤x,y≤105,
字符串总长度不超过100000.
样例
输入样例:
5
32 1.36 nsyiupnnhc
18 4.53 fmofzwrah
33 4.86 wzuymbm
1 3.93 gtnrwcebt
31 4.53 gcllxioc
输出样例:
1 3.93 gtnrwcebt
18 4.53 fmofzwrah
31 4.53 gcllxioc
32 1.36 nsyiupnnhc
33 4.86 wzuymbm
算法1
结构体数组
C++ 代码
//本题是结构体排序
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10010;
struct Data
{
int x;
double y;
string z;
bool operator< (const Data &t) const //按照x从小到大的顺序
{
return x < t.x;
}
}a[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i].x >> a[i].y >> a[i].z;
sort(a, a + n);
for (int i = 0; i < n; i ++ )
printf("%d %.2lf %s\n", a[i].x, a[i].y, a[i].z.c_str());
//用printf输出string时,需要加c_str()
return 0;
}
算法2
STL
C++ 代码
#include <iostream>
#include <map>
#include <string>
#include<cstdio>
using namespace std;
const int N = 10010;
typedef pair<double, string> PII;
map<int, PII> Data;
int main()
{
int n;
int x;
double y;
string z;
cin >> n;
for (int i = 0; i < n; i ++ )
{
cin >> x >> y >> z;
Data.insert({x, {y, z}});
}
for (map<int, PII>::iterator iter = Data.begin(); iter != Data.end(); iter ++ )
printf("%d %.2f %s\n", iter->first, iter->second.first, iter->second.second.c_str());
return 0;
}