C++里argsortDown
时间: 2023-06-23 10:09:56 浏览: 37
在 C++ 中,可以使用以下代码来实现 argsortDown 函数:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
std::vector<int> argsortDown(const std::vector<T>& v) {
std::vector<int> idx(v.size());
std::iota(idx.begin(), idx.end(), 0);
std::sort(idx.begin(), idx.end(), [&v](int i1, int i2) { return v[i1] > v[i2]; });
return idx;
}
int main() {
std::vector<double> v = {3.5, 1.2, 4.8, 2.1, 5.7};
std::vector<int> idx = argsortDown(v);
for (int i : idx) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
使用 lambda 表达式作为比较函数,将索引数组按照对应元素的大小从大到小排序,最后返回排序后的索引数组。上述代码的输出结果为:
```
4 2 0 3 1
```
表示元素 5.7(第 4 个元素)、4.8(第 2 个元素)、3.5(第 0 个元素)、2.1(第 3 个元素)和 1.2(第 1 个元素)从大到小排序的索引值。