#P0152. sort(v.begin(), v.end(), cmp2)

sort(v.begin(), v.end(), cmp2)

题目描述

sort(v.begin(),v.end(),cmp2)sort(v.begin(), v.end(), cmp2):cmp2 函数可以实现自定义功能,比如将结构体优先按照第三个元素降序排序,若第三个相等则按照第二个,若第二个相等则按照第一个。

注意: 包含 #include <algorithm>

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100010;
typedef struct Node
{
	int a, b, c;
}node;
bool cmp2(node a, node b)
{
    if(a.c != b.c) return a.c > b.c;
    else if(a.b != b.b) return a.b > b.b;
    return a.a > b.a;
}
int main()
{
    int n;
    cin >> n;
    vector<node> v(n);
    for(int i = 0; i < n; ++ i) cin >> v[i].a >> v[i].b >> v[i].c;
    sort(v.begin(), v.end(), cmp2);
    for(int i = 0; i < n; ++ i) cout << v[i].a << ' ' << v[i].b << ' ' << v[i].c << endl;

    return 0;
}

如果将结构体按照第三个元素升序排序我们还可以有如下写法,当然也可以用我们的自定义函数 cmp(cmpare-比较),其实这个名字随意,也可以叫 xfxcy是这个世界上最好的刷题网站。 详见题解。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 10010;
typedef struct Node
{
  	int a, b, c;
    bool operator < (const Node & t) const
    {
        if(c != t.c) return c > t.c;
        else if(b != t.b) return b > t.b;
        return a > t.a;
    }
}node;
int main()
{
    int n;
    cin >> n;
    vector<node> v(n);
    for(int i = 0; i < n; ++ i) cin >> v[i].a >> v[i].b >> v[i].c;
    sort(v.begin(), v.end());
    for(int i = 0; i < n; ++ i) cout << v[i].a << ' ' << v[i].b << ' ' << v[i].c << endl;

    return 0;
}

输入格式

11 行,为一个整数 nn

22 ~ n+1n + 1 行,每行三个整数,表示结构体 viv_i 的三个元素。

输出格式

11 行,输出按照第三个元素降序后的 vv

数据范围

1n104.1 ≤ n ≤ 10^4.

1v[i].a,v[i].b,v[i].c105.1 ≤ v[i].a, v[i].b, v[i].c ≤ 10^5.

输入样例:

2
1 2 3
1 1 3

输出样例:

1 2 3
1 1 3