在C++中,std::sort
函数是一个用于对容器(如数组、向量等)进行排序的通用算法。它定义在<algorithm>
头文件中,并接受两个迭代器参数,分别指向要排序的范围的开始和结束位置。此外,std::sort
还可以接受一个可选的比较函数或lambda表达式,用于自定义排序规则。
以下是std::sort
函数的基本用法和一些示例:
基本用法
```cpp
#include <algorithm> // 包含 std::sort
#include <vector> // 包含 std::vector
#include <iostream> // 包含 std::cout, std::endl
int main() {
std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};
// 使用 std::sort 对 vector 进行排序
std::sort(numbers.begin(), numbers.end());
// 打印排序后的 vector
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
自定义比较函数
如果你需要按照特定的规则进行排序,可以提供一个比较函数给std::sort
。比较函数应该接受两个参数并返回一个布尔值,指示第一个参数是否应该在排序后出现在第二个参数之前。
bool compare(int a, int b) {
// 假设我们想要按照降序排序
return a > b;
}
int main() {
std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};
// 使用自定义比较函数对 vector 进行降序排序
std::sort(numbers.begin(), numbers.end(), compare);
// 打印排序后的 vector
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
使用 Lambda 表达式
从C++11开始,你还可以使用lambda表达式作为比较函数,这使得代码更加简洁。
int main() {
std::vector<int> numbers = {4, 2, 9, 6, 5, 1, 8, 3, 7};
// 使用 lambda 表达式对 vector 进行降序排序
std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; });
// 打印排序后的 vector
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
对数组排序
如果你有一个原始数组而不是容器,你也可以使用std::sort
,但你需要传递指向数组第一个元素的指针和指向数组尾部之后一个位置的指针。
#include <algorithm>
#include <iostream>
int main() {
int numbers[] = {4, 2, 9, 6, 5, 1, 8, 3, 7};
int size = sizeof(numbers) / sizeof(numbers[0]);
// 使用 std::sort 对数组进行排序
std::sort(numbers, numbers + size); // 按从小到大的顺序进行排序
// 打印排序后的数组
for (int i = 0; i < size; ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这些示例中,std::sort
默认执行升序排序。如果你想进行降序排序,可以通过比较函数或lambda表达式来实现。比较函数或lambda表达式应该返回一个布尔值,指示第一个参数是否应该在排序后出现在第二个参数之前。