在 C++ 中,std::sort
是一个用于对容器(如数组、std::vector
、std::deque
等)中的元素进行排序的标准库算法。std::sort
函数定义在 <algorithm>
头文件中,提供了多种排序方法,包括默认排序和自定义排序。
基本用法
-
排序
std::vector
:
默认情况下,std::sort
按升序排序,即从小到大。你可以使用 std::sort
对 std::vector
进行排序,如下所示:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {4, 1, 8, 5, 2};// 默认升序排序std::sort(numbers.begin(), numbers.end());// 输出排序后的结果for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
输出:
1 2 4 5 8
2.自定义排序:
你可以通过提供自定义的比较函数或函数对象来改变排序的方式。例如,如果你希望按降序排序,可以使用 std::greater<>
函数对象:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>int main() {std::vector<int> numbers = {4, 1, 8, 5, 2};// 降序排序std::sort(numbers.begin(), numbers.end(), std::greater<int>());// 输出排序后的结果for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
3.排序自定义对象:
如果你有一个自定义类型的对象,你可以提供一个自定义的比较函数来对这些对象进行排序。例如,假设你有一个 Person
结构体,你希望按年龄对 Person
对象进行排序:
#include <iostream>
#include <vector>
#include <algorithm>struct Person {std::string name;int age;Person(const std::string& n, int a) : name(n), age(a) {}
};// 自定义比较函数
bool compareByAge(const Person& a, const Person& b) {return a.age < b.age;
}int main() {std::vector<Person> people = {{"Alice", 30},{"Bob", 25},{"Charlie", 35}};// 按年龄排序std::sort(people.begin(), people.end(), compareByAge);// 输出排序后的结果for (const auto& person : people) {std::cout << person.name << " (" << person.age << ") ";}std::cout << std::endl;return 0;
}
输出:
Bob (25) Alice (30) Charlie (35)
std::sort
函数原型
std::sort
的基本原型如下:
template< class RandomIt >
void sort( RandomIt first, RandomIt last );template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
first
和last
: 这两个迭代器指定了要排序的范围[first, last)
。comp
: 是一个可选的比较函数或函数对象,用于指定排序规则。如果省略,std::sort
默认使用<
操作符进行升序排序。
总结
- 默认排序:
std::sort
默认按升序排序。 - 自定义排序: 通过提供比较函数或函数对象可以进行自定义排序。
- 排序对象: 可以排序自定义对象,只需提供适当的比较逻辑。
std::sort
是一个高效的排序算法,通常实现为快速排序(quicksort
),在平均情况下具有 O(n log n) 的时间复杂度