c++ - 如何按降序对标准数组进行排序 - C++ 11
问题描述
有一些资源可用于按降序对数组进行排序:
https://www.includehelp.com/stl/sort-an-array-in-descending-order-using-sort-function.aspx
如何在 ASC 和 DESC 模式下对 C++ 数组进行排序?
https://www.geeksforgeeks.org/sort-c-stl/
但没有一个解决为 astd::array
而不是原始int myArr[]
类型执行此操作的问题。
我有这样的代码:
#include <iostream>
#include <array>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
int main(){
array<int, 5> myArray = {30, 22, 100, 6, 0};
for(int item : myArray){
cout << item << endl;
}
sort(myArray.begin(), myArray.end());
cout << "NOW, SORTED: " << endl;
for (int otheritem: myArray){
cout << otheritem << endl;
}
}
产生:
30
22
100
6
0
NOW, SORTED:
0
6
22
30
100
但是,我正在尝试生成此输出:
100
30
22
6
0
通过按降序对数组进行排序。我已经尝试按照上面 SO 帖子中的提示进行操作:
sort(myArray, myArray.size()+n, greater<int>());
但这会产生错误:
no instance of overloaded function "sort" matches the argument list -- argument types are: (std::array<int, 5ULL>, unsigned long long, std::greater<int>)
我怎样才能standard array
按int
降序排序?
解决方案
与原始数组不同,std::array
不会隐式转换为指针(即使您可以从 显式获取指针std::array::data
),您应该使用begin()
and end()
,这通常用于从 STL 容器获取迭代器。例如
sort(myArray.begin(), myArray.end(), greater<int>());
或者
sort(std::begin(myArray), std::end(myArray), greater<int>());
PS:后者也适用于原始数组。
推荐阅读
- microsoft-graph-api - 带有 HTTP 状态 200 响应的 Microsoft Graph 的 One Drive 内容 API
- websocket - 在 Julia 中使用 Websocket 时遇到问题
- java - 为什么 Apache 项目对 Java 版本敏感?
- javascript - 当改变一个模块对象时,为什么花括号导入没有改变?
- android - MediaFilePicker 总是显示空目录
- r - 在ggplot上绘制连接两点的线段
- javascript - Cloud Firebase 功能在本地工作,但在部署后不起作用
- swift - 滚动到顶部时,UIScrollView 出现故障和抖动
- python - 通过将 for 循环替换为 pandas 操作来提高代码效率
- javascript - 在nodejs中检查日期数组是否由n个连续天组成的最佳方法?