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];});
相关推荐
陌路2010 分钟前
C23构造函数与析构函数
开发语言·c++
_OP_CHEN40 分钟前
C++进阶:(二)多态的深度解析
开发语言·c++·多态·抽象类·虚函数·多态的底层原理·多态面试题
CsharpDev-奶豆哥43 分钟前
JavaScript性能优化实战大纲
开发语言·javascript·性能优化
小妖同学学AI1 小时前
Rust 深度解析:变量、可变性与所有权的“安全边界”
开发语言·安全·rust
2301_764441331 小时前
基于python构建的低温胁迫实验
开发语言·python
ICT系统集成阿祥1 小时前
华为CloudEngine系列交换机堆叠如何配置,附视频
开发语言·华为·php
wjs20241 小时前
C++ 基本语法
开发语言
金色熊族2 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
七夜zippoe2 小时前
仓颉语言核心特性深度解析——现代编程范式的集大成者
开发语言·后端·鸿蒙·鸿蒙系统·仓颉
四谎真好看3 小时前
Java 黑马程序员学习笔记(进阶篇21)
java·开发语言·笔记·学习·学习笔记