标准模板库(The C++ Standard Template Library,简称STL)是C++编程语言的软件库。它提供了四个组件,称为算法(例如排序、查找)、容器(例如双链表、队列)、泛型函数和迭代器。

先看一个列子,这个例子使用sort的简单形式。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
    int n = sizeof(arr) / sizeof(arr[0]); //总的元素个数

    // sort()两个参数,第一个是待排序的开始(含),第二个是待排序的结束位置(不含)。
    sort(arr, arr + n);

    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
    //输出结果:0 1 2 3 4 5 6 7 8 9 

    return 0;
}


sort()函数可以接收两个到三个参数:

  1. 第一个是数组/向量的点,排序需要从这里开始。
  2. 第二个参数是我们希望数组/向量排序的长度。
  3. 第三个参数是可选的,在不用默认比较函数时使用。

默认情况下,sort()函数按升序对元素进行排序。

比较函数的一些说明:

  1. 比较函数接受两个元素作为参数,并返回一个bool。
  2. 返回的值指示第一个元素在其定义的特定严格顺序中是否在第二个参数之前。
  3. 返回值true表示第一个元素排在前面,false表示第二个参数排在前面。

下面是比较struct的例子。

#include <bits/stdc++.h>
using namespace std;

// An interval has a start time and end time
struct Interval {
    int start, end;
};

// Compares two intervals according to staring times.
bool compareInterval(Interval i1, Interval i2)
{
    return (i1.start < i2.start);
}

int main()
{
    Interval arr[]  = { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } };
    int n = sizeof(arr) / sizeof(arr[0]);

    // 使用自定义的比较函数
    sort(arr, arr + n, compareInterval);

    for (int i = 0; i < n; i++)
        cout << "[" << arr[i].start << "," << arr[i].end << "] ";
    //输出结果: [1,9] [2,4] [4,7] [6,8] 
    
    return 0;
}