如何获取向量的排序索引?

Posted

技术标签:

【中文标题】如何获取向量的排序索引?【英文标题】:How to get the sorted index of a vector? 【发布时间】:2016-06-09 17:09:49 【问题描述】:

我有一个向量。它没有排序。现在我想获取它的索引,它将对向量进行排序。例如vector<int> v1, 3, 2,排序索引是0, 2, 1,因为v[0] <= v[2] <= v[1]。如果两个相等,不管哪个先行。

【问题讨论】:

【参考方案1】:

您要查找的内容称为标签排序(或索引排序)。这是一个在 C++11 中使用 lambda 的最小示例:

#include <algorithm>
#include <numeric>
#include <iostream>
#include <vector>

template<typename T>
std::vector<std::size_t> tag_sort(const std::vector<T>& v)

    std::vector<std::size_t> result(v.size());
    std::iota(std::begin(result), std::end(result), 0);
    std::sort(std::begin(result), std::end(result),
            [&v](const auto & lhs, const auto & rhs)
            
                return v[lhs] < v[rhs];
            
    );
    return result;


int main()

    std::vector<char> v'a', 'd', 'b', 'c';
    auto idxs = tag_sort(v);
    for (auto && elem : idxs)
        std::cout << elem << " : " << v[elem] << std::endl;

Live on Coliru

【讨论】:

以上是关于如何获取向量的排序索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何从包含java中对象的向量中获取元素的索引

排序后如何获取索引排列

如何从传递给某些 STL 算法的谓词中获取元素的索引?

如何根据已排序索引的向量对 std::set 索引进行排序?

如何获得二维向量的第一层索引?

如何在 Python 中获取已排序数组的索引