1.sort简介:
在头文件 < algorithm>中
(1)用于C++中,对给定区间所有元素进行排序;
(2)使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)
可以自定义对结构体按照需要进行定义排序
例如 按照关键字顺序:年龄>工号>姓名,从小到大。
struct man
{
int g,age; //工号,年龄
string name;//姓名
};
bool operator < (const man& m1 , const man& m2)
{
if(m1.age==m2.age) //年龄相同时
{
if(m1.g == m2.g ) //工号相同时
return m1.name < m2.name ; //按照姓名由小到大排序
else //工号不同时
return m1.g <m2.g; //直接安工号从小到大排序
}
else //年龄不同时
return m1.age < m2.age; //直接按照年龄从小到大排序
}
原题目:
题目描述:
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。
输入描述:
输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。
输出描述:
可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。
关键字顺序:年龄>工号>姓名,从小到大。
示例1
输入
5
501 Jack 6
102 Nathon 100
599 Lily 79
923 Lucy 15
814 Mickle 65
输出
501 Jack 6
923 Lucy 15
814 Mickle 65
#include <bits/stdc++.h>
using namespace std;
struct man
{
int g,age;
string name;
};
bool operator < (const man& m1 , const man& m2)
{
if(m1.age==m2.age)
{
if(m1.g == m2.g )
return m1.name < m2.name ;
else
return m1.g <m2.g;
}
else
return m1.age < m2.age;
}
int main()
{
int n,k= 1 ;
cin>>n;
man x[35];
for(k = 0 ; k < n ; k++)
cin>>x[k].g>>x[k].name>>x[k].age;
sort(x,x+n);
if(n < 3)
for(int i = 0 ; i < n ; i++)
cout<<x[i].g<<" " <<x[i].name<<" "<<x[i].age<<endl;
else
for(int i = 0 ; i < 3 ; i ++)
cout<<x[i].g<<" " <<x[i].name<<" "<<x[i].age<<endl;
return 0;
}