在C++中,sort
是标准库 <algorithm>
中的一个函数,用于对数组或容器中的元素进行排序。它使用高效的排序算法(通常是快速排序或内省排序),能够对任意可比较的元素进行排序。
基本用法
sort
函数的基本语法如下:
1 2 3
| #include <algorithm>
sort(start, end);
|
start
:指向排序范围的起始位置的迭代器(或指针)。
end
:指向排序范围的结束位置的迭代器(或指针),不包括这个位置。
sort
默认按升序排序。
示例 1:对数组排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> #include <algorithm>
using namespace std;
int main() { int arr[] = {5, 2, 9, 1, 5, 6}; int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n);
cout << "排序后的数组: "; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
|
输出:
示例 2:对容器(如 vector
)排序
sort
也可以用于标准库容器,比如 vector
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> #include <algorithm> #include <vector>
using namespace std;
int main() { vector<int> vec = {5, 2, 9, 1, 5, 6};
sort(vec.begin(), vec.end());
cout << "排序后的 vector: "; for (int num : vec) { cout << num << " "; } return 0; }
|
输出:
1
| 排序后的 vector: 1 2 5 5 6 9
|
自定义排序规则
sort
允许通过传递一个自定义的比较函数来定义排序规则。比较函数需要返回一个布尔值,表示第一个参数是否应该排在第二个参数之前。
示例 3:降序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <iostream> #include <algorithm> #include <vector>
using namespace std;
bool compare(int a, int b) { return a > b; }
int main() { vector<int> vec = {5, 2, 9, 1, 5, 6};
sort(vec.begin(), vec.end(), compare);
cout << "降序排序后的 vector: "; for (int num : vec) { cout << num << " "; } return 0; }
|
输出:
1
| 降序排序后的 vector: 9 6 5 5 2 1
|
示例 4:使用 Lambda 表达式
C++11 引入了 Lambda 表达式,可以更方便地定义比较函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream> #include <algorithm> #include <vector>
using namespace std;
int main() { vector<int> vec = {5, 2, 9, 1, 5, 6};
sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });
cout << "降序排序后的 vector: "; for (int num : vec) { cout << num << " "; } return 0; }
|
输出:
1
| 降序排序后的 vector: 9 6 5 5 2 1
|
对复杂数据类型排序
sort
也可以对复杂数据类型(如结构体或类)进行排序,只需定义相应的比较规则。
示例 5:对结构体排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream> #include <algorithm> #include <vector>
using namespace std;
struct Person { string name; int age; };
bool compareByAge(const Person &a, const Person &b) { return a.age < b.age; }
int main() { vector<Person> people = {{"Alice", 25}, {"Bob", 20}, {"Charlie", 30}};
sort(people.begin(), people.end(), compareByAge);
cout << "按年龄排序后的结果:\n"; for (const auto &person : people) { cout << person.name << " (" << person.age << ")\n"; } return 0; }
|
输出:
1 2 3 4
| 按年龄排序后的结果: Bob (20) Alice (25) Charlie (30)
|
总结
sort
是 C++ 中用于排序的高效函数,支持数组和容器。
- 默认按升序排序,但可以通过自定义比较函数或 Lambda 表达式实现自定义排序规则。
- 适用于基本数据类型和复杂数据类型(如结构体或类)。
- 需要包含头文件
<algorithm>
。
通过灵活使用 sort
,可以轻松实现各种排序需求。