欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

*/

 

相关标签: STl 算法