📌  相关文章
📜  如何在C++中使用STL对数组进行排序?(1)

📅  最后修改于: 2023-12-03 14:52:40.752000             🧑  作者: Mango

如何在C++中使用STL对数组进行排序?

在C++中,可以使用STL提供的sort函数对数组进行排序。sort函数在头文件中定义,使用时需要传入要排序区间的起始和结束指针,以及一个函数对象用于定义排序规则。

基本用法示例
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int arr[] = {3, 2, 1, 4, 5};
    int n = sizeof(arr) / sizeof(int);

    sort(arr, arr+n);

    for(int i=0; i<n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

这个示例中,首先声明了一个包含5个整数的数组,然后使用sizeof运算符计算出数组长度,然后使用sort函数对整个数组进行排序。最后,使用for循环遍历数组并输出排好序的结果。

使用函数对象进行排序

如果要修改sort函数的排序规则,可以使用一个函数对象来定义自己的排序规则。这个函数对象需要有一个接受两个参数的重载的()运算符,返回一个bool类型的值表示排序的结果。

#include <iostream>
#include <algorithm>

using namespace std;

class Cmp {
public:
    bool operator() (int a, int b) {
        return a > b;
    }
};

int main() {
    int arr[] = {3, 2, 1, 4, 5};
    int n = sizeof(arr) / sizeof(int);

    sort(arr, arr+n, Cmp());

    for(int i=0; i<n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

这个示例中,我们定义了一个Cmp函数对象,它的重载()运算符返回a>b的结果,表示比较a和b的大小关系。然后,我们使用这个函数对象来调用sort函数,从而指定按照降序排序。

排序自定义类型

如果要对自定义类型进行排序,需要自己定义排序规则。可以在自定义类型中定义一个小于运算符<,表示它们的大小关系。然后可以使用sort函数对自定义类型进行排序。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

class Person {
public:
    int age;
    string name;
    Person(int age, string name): age(age), name(name) {}
    bool operator< (const Person& p) const {
        return age < p.age; // 按年龄排序
    }
};

int main() {
    vector<Person> people = {
        Person(20, "Alice"), Person(18, "Bob"), Person(25, "Charlie")
    };

    sort(people.begin(), people.end());

    for(auto person: people) {
        cout << person.age << " " << person.name << endl;
    }

    return 0;
}

这个示例中,我们定义了一个Person类,它包含年龄和名字两个属性。在Person类中,我们重载了小于运算符<,表示按照年龄进行排序。然后,我们使用vector存储多个Person对象,调用sort函数按照年龄排序,最后输出排序后的结果。

总结

使用STL提供的sort函数可以方便地对数组进行排序。可以使用默认的排序规则或者自定义比较函数对象,还可以对自定义类型进行排序。需要注意的是,排序规则需要满足一些特定的要求,才能正确地进行排序。