c++如何将结构体数组进行排序

我在做一道大模拟的题,想对结构体的数组排序,网上查了没有

尽量使用sort排序

#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

map<string,int> cards;
string card[] = {"1M","2M","3M","4M","5M","6M","7M","8M","9M",
                 "1P","2P","3P","4P","5P","6P","7P","8P","9P",
                 "1S","2S","3S","4S","5S","6S","7S","8S","9S",
                 "E","S","W","N","B","F","Z",
                 "PASS","REVERSE","DOUBLE"};

struct people
{
    int cardss[14];
    sort(cardss,cardss + 13);
} ABCD[4];
string card_new[149];

int l = 0;
bool cmp(people a,people b)
{
    return a.cardss[l] > b.cardss[++l];
    //return a.cardss > b.cardss;
}

int now = 0;
void in_first()
{
    char a[] = {'A','B','C','D'};
    for(int i = 0;i < 13;i++)
    {
        for(int j = 0;j < 4;j++)
        {
            cout << a[j] << " IN " << card_new[now] << endl;
            map<string,int> :: iterator itnum = cards.find(card_new[now]);
            ABCD[j].cardss[i] = itnum->second;
            now++;
        }
    }
    return;
}

void in(int j)
{
    char a[] = {'A','B','C','D'};
    cout << a[j] << " IN " << card_new[now] << endl;
    map<string,int> :: iterator itnum = cards.find(card_new[now]);
    ABCD[j].cardss[13] = itnum->second;
    now++;
}

void out(int j)
{
    char a[] = {'A','B','C','D'};
    cout << a[j] << " OUT " << card_new[now] << endl;
    ABCD[j].cardss[13] = -1;
}

int main()
{
    for(int i = 0;i < (sizeof(card)/sizeof(card[0]));i++)
    {
        cards[card[i]] = i;
    }

    for(int i = 0;i < 148;i++)
        cin >> card_new[i];
    in_first();

    for(int i = 0;i < 4;i++)
    {
        for(int j = 0;j < 13;j++)
        {
            cout << ABCD[j].cardss[i] << " ";
        }
        cout<<endl;
    }

    int i = 0;
    /*
    while(!ifwin())
    {
        in(i);
        out(i);
        ifpeng();
        if(i%4 == 0)
            i = 0;
    }
    */

    return 0;
}

题目连接:https://www.luogu.com.cn/problem/P7147?%ra=link

sort第三个参数是自定义比较对象。。