std::sort
是 C++ 标准库中一个非常常用的函数,它用于对序列进行排序。这个函数定义在 <algorithm>
头文件中,可以对数组和容器中的元素进行排序,默认情况下按升序排序。
基本用法
std::sort
的基本用法非常简单,只需要指定要排序的序列的起始和结束迭代器。例如,对一个 std::vector<int>
类型的容器进行排序:
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {4, 1, 3, 5, 2};
std::sort(v.begin(),v.end());
return 0;
}
在这个例子中,std::sort(v.begin(), v.end())
将向量 v
中的元素从小到大排序。
自定义比较函数
如果你想按照不同的标准排序(如降序或根据对象的某个属性),你可以向 std::sort
提供第三个参数,即一个比较函数或者一个函数对象。比如,使用 std::greater<int>()
来按降序排序:
std::sort(v.begin(), v.end(), std::greater<int>());
//greater是模板,所以必须要使用int进行控制
对于自定义类型,比如一个包含整数对的结构体,你可以定义你自己的比较函数:
struct MyPair {
int first, second;
};
bool compareMyPair(const MyPair& a, const MyPair& b) {
return a.first < b.first;
}
std::vector<MyPair> vp = {{1, 2}, {3, 1}, {2, 4}};
std::sort(vp.begin(), vp.end(), compareMyPair);
C++ 中的 std::sort
函数不仅可以对容器如 std::vector
进行排序,也可以对普通数组进行排序。对于数列,你可以使用数组或 std::array
(如果知道数列的大小并且不会改变)。
使用普通数组排序
#include <algorithm>
#include <iostream>
int main() {
int arr[] = {10, 5, 15, 20, 2};
int n = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + n);
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
这里使用 std::sort(arr, arr + n)
对数组 arr
进行排序。arr + n
表示数组末尾的位置,因为数组的名称代表数组第一个元素的地址。