C++ ——排序并保留索引

C++自带的排序函数sort只能获得排好序的值,没办法像Matlab一样同时返回排序索引。

下面使用c++11中的 lambda来为sort函数添加一个模式:

cpp 复制代码
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;

template <typename T>
vector<size_t> sort_indexes(const vector<T> &v) {

  // 初始化索引向量
  vector<size_t> idx(v.size());
  //使用iota对向量赋0~?的连续值
  iota(idx.begin(), idx.end(), 0);

  // 通过比较v的值对索引idx进行排序
  sort(idx.begin(), idx.end(),
       [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});
  return idx;
}

上面的是升序排列,如果想要降序排列,只需要更改为:

cpp 复制代码
[&v](size_t i1, size_t i2) {return v[i1] > v[i2];});
相关推荐
王老师青少年编程几秒前
2025信奥赛C++提高组csp-s复赛真题及题解:社团招新
c++·真题·csp·信奥赛·csp-s·提高组·复赛
一叶星殇5 分钟前
.NET 6 NLog 实现多日志文件按业务模块拆分的实践
开发语言·.net
橘子师兄5 分钟前
C++AI大模型接入SDK—Ollama本地接入Deepseek
c++·人工智能·后端
程序猿编码8 分钟前
深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现
linux·c语言·c++·tcp/ip·内核
lead520lyq16 分钟前
Golang GPRC流式传输案例
服务器·开发语言·golang
xyq202417 分钟前
《C 经典100例》
开发语言
不染尘.18 分钟前
二分算法(优化)
开发语言·c++·算法
只是懒得想了18 分钟前
Go语言ORM深度解析:GORM、XORM与entgo实战对比及最佳实践
开发语言·数据库·后端·golang
不吃橘子的橘猫19 分钟前
Verilog HDL基础(概念+模块)
开发语言·学习·算法·fpga开发·verilog
lly20240622 分钟前
JavaScript 闭包详解
开发语言