STL模板库之sort()对结构体排序用法
程序员文章站
2022-03-06 11:45:32
...
为了明年的蓝桥杯比赛,不得不重拾起STL(这个说好用好用,说不好用也不好用的东西)
尤其是其与结构体联系起来。
以下便为对结构体指针所指内容进行排序,sort(a+i,a+n,comp)模板按降序排序
第一、二个参数分别表示起始排序的地址
第三个参数是一个函数名,表示对结构体排序的依据
如果不对指针进行拷贝构造,则排序时会使得原结构体的顺序也会发生改变。
注释是示例运行
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
int n;
using namespace std;
class goods
{
public:
int w;
int v;
goods(int w1=0,int v1=0)
{
w=w1;
v=v1;
}
};
int comp(const goods &a,const goods &b)
{
float x=a.v/a.w;
float y=b.v/b.w;
return x>y;
}
goods* sort_up(int i,goods *g)
{
goods *g1=new goods();
int j=0;
while(j<n)
{
g1[j]=g[j];
j++;
}
sort(g1+i,g1+n,comp);//g1[2].v g1[2].w
return g1;
}
int main()
{
int k;
cin>>n>>k;
goods g[n];
for (int i=0; i<n; ++i)
cin>>g[i].v>>g[i].w;
goods *g1=g;//给g1排序,g1、g都变了
goods *g2=sort_up(0,g1);//这里的数字可以改成0-(n-1)任一,表示从第几位是开始排序
cout<<" ------------------------ "<<endl;
cout<<g[0].v<<' '<<g[0].w<<endl;
cout<<g[1].v<<' '<<g[1].w<<endl;
cout<<g[2].v<<' '<<g[2].w<<endl;
cout<<g[3].v<<' '<<g[3].w<<endl;
cout<<" ------------------------ "<<endl;
cout<<g2[0].v<<' '<<g2[0].w<<endl;
cout<<g2[1].v<<' '<<g2[1].w<<endl;
cout<<g2[2].v<<' '<<g2[2].w<<endl;
cout<<g2[3].v<<' '<<g2[3].w<<endl;
return 0;
}
/*4 0
4 6
1 2
2 1
3 3
4 0
10 5
4 1
3 6
7 2
*/