STL sort入坑笔记

发布于 2018-07-20  534 次阅读


先吐槽一句:sort真好用 qwq

>模板题<

sort是什么?

sort是STL(Standard Template Library)中定义的一个函数,可以实现对某一个容器内的元素[i,j)进行排序,其内部使用快速排序实现,时间复杂度为o(nlongn)。

sort如何使用?

数组版:

#include <iostream>
#include <algorithm>

const int MAX = 100;
int a[MAX] = {0}, n;

int main()
{
    std::cin >> n;
    for(int i = 1;i <= n;i++) std::cin >> a[i];

    std::sort(a+1,a+n+1); // 因为[i,j),不包含j,所以n+1
    //降序 std::sort(a+1,a+n+1,std::greater<int>());

    for(int i = 1;i <= n;i++) std::cout << a[i] <<" ";
    return 0;
}

结构体版:

这里提一句,sort内部是用 " < " 来比较大小进行排序的,所以我们给结构体重载一个"<"运算符,这叫运算符重载

实现智学网排名 ( • ̀ω•́ )✧
输入学生人数,年龄,成绩

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

struct peo
{
    string name;  //名称
    int age;      //年龄
    int data;    //成绩

    bool operator< (const peo &b) const
    {
        return this->data > b.data; //以成绩为排序依据,注意 是“>”
    }

}a[100];
int n;

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i].name >> a[i].age >> a[i].data;

    sort(a + 1, a + n + 1);

    for (int i = 1; i <= n; i++)
        cout << i << ". " << a[i].name << " " << a[i].age << " " << a[i].data << endl;

    return 0;
}

练习

分数线划定https://www.luogu.org/problemnew/show/P1068