#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
//ios::sync_with_stdio(false);
struct node{ //结构体
int n,y;
string a,x;
}stu[105];
/*
用char a[105],x[105];
template<class M>
void Swap(M *x, M *y)
{
M tmp= *x;
*x = *y;
*y = tmp;
注释的这种写法只能交换姓名的第一个字符(不可取),因为指针只指向第一个char字符
但是也可以用*x*y指针,用三个strcpy函数交换
}
*/
template<class M>//申明类型参数化、可以忽略类型
void Swap(M &x, M &y)//这里就可以用无类型的变量取地址来交换啦
{
M tmp= x;
x = y;
y = tmp;
}
template<class N>
void SSwap(N &x, N &y)
{
N q = x;
x = y;
y = q;
}
int main()
{
int i,j,k,n,m;
cin>>n;
getchar();
for(i=1;i<=n;i++)
{
cin>>stu[i].a>>stu[i].x>>stu[i].n>>stu[i].y;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
if(stu[j].n<stu[j+1].n||(stu[j].n==stu[j+1].n && stu[j].y<stu[j+1].y))
{
Swap(stu[j].a,stu[j+1].a);//之前写的时候考虑到数组交换和数字交换的不同,当时也是在尝试,现在不需要区分Swap和SSwap之间的区别,都一样的。
Swap(stu[j].x,stu[j+1].x);
SSwap(stu[j].n,stu[j+1].n);
SSwap(stu[j].y,stu[j+1].y);
}
}
}
for(i=1;i<=n;i++)
{
cout<<stu[i].a<<" "<<stu[i].x<<" "<<stu[i].n<<" "<<stu[i].y<<endl;
}
return 0;
}
零基础学C/C++171——年龄排序(类型参数化做法)
本文介绍了一个使用C++实现的结构体排序程序示例,通过定义结构体并使用泛型模板函数进行数据成员的交换,实现了对学生信息按特定条件的排序。

被折叠的 条评论
为什么被折叠?



