【C++】sort函数

std::sort函数是C++标准库中的一个算法函数,用于对指定范围内的元素进行排序。它可以对数组、向量(std::vector)等容器进行排序操作。

std::sort函数的语法如下:

template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);

参数解析:

  • RandomIt first:指向容器中排序范围的起始位置的迭代器。
  • RandomIt last:指向容器中排序范围的结束位置的迭代器。
  • Compare comp:排序时用于比较元素的自定义比较函数,可选参数。如果不提供自定义比较函数,则使用默认的比较函数(升序排列)。

std::sort函数默认使用的是快速排序(Quick Sort)算法或者是堆排序(Heap Sort)算法,具体使用哪种算法取决于实现。它会对指定范围内的元素进行原地排序,即直接修改容器中的元素顺序,而不是创建一个新的排序结果。

对于基本类型(如intdouble等)或具有内置比较运算符的类型,std::sort会按照默认的升序进行排序。

以下是一个使用std::sort函数对数组进行升序排序的示例:

#include <iostream>
#include <algorithm>

int main() {
    
    
    int arr[] = {
    
    5, 2, 8, 1, 9};

    std::sort(arr, arr + 5);

    for (int i = 0; i < 5; i++) {
    
    
        std::cout << arr[i] << " ";
    }
    
    return 0;
}

输出结果为:1 2 5 8 9

在上述示例中,使用std::sort对数组arr进行排序,通过指定arr的起始位置arr和结束位置arr + 5,对数组中的元素进行升序排序。最后使用循环输出排序后的数组元素。

需要注意的是,使用std::sort函数时,要确保提供的迭代器范围有效,且容器中的元素类型支持比较运算符。否则,可能会导致未定义的行为。

此外,要自定义排序规则,可以通过提供一个比较函数或者比较函数对象来传递给std::sort函数。

比较函数是一个接受两个参数的函数,返回一个布尔值,用于指示两个元素的顺序关系。如果返回值为true,则表示第一个参数应该排在第二个参数之前;如果返回值为false,则表示第一个参数应该排在第二个参数之后。

下面是一个使用比较函数进行降序排序的示例:

#include <iostream>
#include <algorithm>

// 比较函数,用于降序排序
bool compare(int a, int b) {
    
    
    return a > b;
}

int main() {
    
    
    int arr[] = {
    
    5, 2, 8, 1, 9};

    std::sort(arr, arr + 5, compare);

    for (int i = 0; i < 5; i++) {
    
    
        std::cout << arr[i] << " ";
    }
    
    return 0;
}

输出结果为:9 8 5 2 1

在上述示例中,定义了一个名为compare的比较函数,用于降序排序。在std::sort函数的第三个参数中传递了这个比较函数,告诉std::sort按照降序规则来排序数组。最后输出排序后的数组元素。

除了比较函数,还可以使用函数对象(Functor)作为自定义的排序规则。函数对象是一个类对象,实现了operator()函数。可以在函数对象中重载()运算符,使其可以像函数一样调用。通过定义函数对象,在其中实现比较逻辑,就可以传递该函数对象给std::sort函数。

以下是使用函数对象进行排序的示例:

#include <iostream>
#include <algorithm>

// 函数对象,用于降序排序
struct Compare {
    
    
    bool operator()(int a, int b) {
    
    
        return a > b;
    }
};

int main() {
    
    
    int arr[] = {
    
    5, 2, 8, 1, 9};

    std::sort(arr, arr + 5, Compare());

    for (int i = 0; i < 5; i++) {
    
    
        std::cout << arr[i] << " ";
    }
    
    return 0;
}

输出结果为:9 8 5 2 1

在上述示例中,定义了一个名为Compare的函数对象,通过重载()运算符,在其中实现了比较逻辑。在std::sort函数的第三个参数中创建了一个Compare对象,作为自定义的排序规则。最后输出排序后的数组元素。

也可以使用 lambda 表达式作为自定义比较函数。lambda 表达式是一种用于创建匿名函数的语法。lambda 表达式的基本形式是 [] (parameters) { function_body }

以下是使用 lambda 表达式作为自定义比较函数进行排序的示例:

sort(v.begin(), v.end(), [](const vector<int>& a, const vector<int>& b) {
    
    
        return a[0] < b[0];
    });

比较 a 和 b 的第一个元素的值,按照升序进行排序。

猜你喜欢

转载自blog.csdn.net/XiugongHao/article/details/130977213
今日推荐