ranges库 sort
时间: 2025-06-21 14:27:47 浏览: 10
### 关于C++ Ranges 库中的 `sort` 函数
在 C++20 中引入了Ranges库,这使得处理容器和迭代器更加直观。通过使用ranges功能,可以简化许多算法操作,包括排序。
#### 使用 `std::ranges::sort`
为了利用新特性来对范围内的元素进行排序,可以直接调用 `std::ranges::sort()` 方法并传递要排序的序列作为参数[^1]:
```cpp
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {5, 3, 8, 7, 1};
// 对整个向量进行升序排列
std::ranges::sort(numbers);
for(auto num : numbers){
std::cout << num << " ";
}
}
```
这段代码会输出已按升序排好序的一系列整数:`1 3 5 7 8`.
如果想要降序排列,则可以通过提供自定义比较器实现这一点:
```cpp
// 定义一个lambda表达式用于逆序比较两个数值大小
auto descending_order = [](const int& lhs, const int& rhs){return lhs > rhs; };
// 调用带有自定义谓词版本的方法来进行降序排序
std::ranges::sort(numbers, descending_order);
```
此外还可以指定特定字段上的排序逻辑,比如当处理结构体类型的对象集合时非常有用。下面是一个基于成员变量排序的例子:
```cpp
struct Person {
std::string name;
unsigned age;
friend bool operator<(const Person &lhs, const Person &rhs) {
return lhs.age < rhs.age;
}
};
void sort_people(std::vector<Person>& people) {
// 根据年龄从小到大排序
std::ranges::sort(people);
// 或者根据姓名字母顺序排序
auto by_name = [](const Person& p1, const Person& p2) -> bool{
return p1.name < p2.name;
};
std::ranges::sort(people, by_name);
}
```
以上展示了如何运用 C++20 的 ranges 特性轻松完成不同类型数据集的排序任务.
阅读全文
相关推荐


















