在C++中,`sort()` 函数是一个非常强大的标准库函数,用于对数组或容器中的元素进行排序。它定义在 `<algorithm>` 头文件中。`sort()` 可以对几乎所有类型的序列进行排序,包括数组、`std::vector`、`std::list`、`std::deque` 等。
### 基本用法
`sort()` 函数的基本用法非常简单。对于一个数组或容器,你可以这样调用它:
#include <algorithm> // 包含sort()
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {5, 3, 2, 8, 6};
std::sort(vec.begin(), vec.end());
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
这段代码会将 `vec` 中的元素从小到大排序。
### 函数原型
`sort()` 函数的原型如下:
void sort(ForwardIterator begin, ForwardIterator end);
对于自定义数据类型或复杂对象,你可以提供自己的比较函数:
void sort(ForwardIterator begin, ForwardIterator end, Compare comp);
这里的 `ForwardIterator` 是指向序列中元素的迭代器,`Compare` 是一个比较函数或函数对象,它接受两个参数并返回一个布尔值,指示第一个参数是否应该在第二个参数之前。
### 使用自定义比较函数
你可以提供一个自定义的比较函数来控制排序顺序。例如,如果你想要从大到小排序,可以这样做:
#include <algorithm> // 包含sort()
#include <vector>
#include <iostream>
bool compare(int a, int b) {
return a > b; // 降序排序
}
int main() {
std::vector<int> vec = {5, 3, 2, 8, 6};
std::sort(vec.begin(), vec.end(), compare);
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
### 使用Lambda表达式
在C++11及更高版本中,你可以使用lambda表达式来指定排序准则,这使得代码更加简洁:
#include <algorithm> // 包含sort()
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {5, 3, 2, 8, 6};
std::sort(vec.begin(), vec.end(), [](int a, int b) {
return a > b; // 降序排序
});
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
### 注意事项
- `sort()` 会就地排序,这意味着它会直接修改传入的序列。
- 默认情况下,`sort()` 使用`std::less<T>`作为比较函数,其中 `T` 是序列中元素的类型,这会导致元素按升序排序。
- 对于复杂对象,确保你的比较函数或lambda表达式正确地处理了对象的比较逻辑。
`sort()` 是C++标准库中非常强大和灵活的工具,适用于各种排序需求。