在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> // 包含 sort 函数

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;
}

输出

1
排序后的数组: 1 2 5 5 6 9

示例 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()); // 对 vector 排序

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,可以轻松实现各种排序需求。