📅  最后修改于: 2023-12-03 14:52:40.752000             🧑  作者: Mango
在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函数可以方便地对数组进行排序。可以使用默认的排序规则或者自定义比较函数对象,还可以对自定义类型进行排序。需要注意的是,排序规则需要满足一些特定的要求,才能正确地进行排序。