C++的sort函数如何实现从大到小排序
时间: 2024-09-23 12:01:19 浏览: 9
C++标准库中的`sort`函数默认按照升序排列元素,如果你想实现从大到小的排序,你需要自定义一下比较规则。你可以通过提供一个比较函数给`sort`,这个函数通常接受两个类型的值并返回一个布尔值,表示第一个值是否应该排在第二个值之前。
例如,对于整数数组,你可以创建一个比较函数,比如`greater<int>()`,它是STL中提供的,它会使得较大的数排在前面:
```cpp
#include <algorithm>
#include <vector>
bool compareDesc(const int& a, const int& b) {
return a > b;
}
int main() {
std::vector<int> vec = {5, 2, 8, 1, 9};
// 使用compareDesc函数作为第三个模板参数
std::sort(vec.begin(), vec.end(), compareDesc);
for (const auto &num : vec) {
std::cout << num << " ";
}
// 输出:9 8 5 2 1
return 0;
}
```
在这个例子中,`compareDesc`函数告诉`sort`你应该按降序而不是默认的升序排列。
相关问题
c++ sort函数由小到大排序
以下是使用C++的sort函数进行由小到大排序的例子:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a < b;
}
int main() {
int arr[] = {5, 2, 8, 4, 7};
int len = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + len, cmp);
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
输出结果为:2 4 5 7 8
其中,sort函数的第一个参数为待排序数组的起始地址,第二个参数为待排序数组的结束地址的下一个地址,第三个参数为排序准则,如果不写则默认从小到大排序。在本例中,我们自定义了一个cmp函数,用于实现从小到大排序。
sort函数如何从大到小排序
sort函数默认是从小到大排序,如果要从大到小排序,可以使用自定义比较函数。可以使用Lambda表达式或者函数指针来实现。以下是使用Lambda表达式的示例代码:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8};
sort(nums.begin(), nums.end(), [](int a, int b) {
return a > b;
});
for (auto num : nums) {
cout << num << " ";
}
return 0;
}
```
输出为:9 8 6 5 5 5 4 3 3 2 1 1
Lambda表达式`[](int a, int b) { return a > b; }`表示如果a大于b,则返回true,否则返回false,即从大到小排序。