C++:sort自动排序函数
在 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) 的时间复杂度