c – 创建一个排序向量的向量

前端之家收集整理的这篇文章主要介绍了c – 创建一个排序向量的向量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > c++ sort keeping track of indices4个
变量x是n个int的向量,我想以升序对向量进行排序.但是,由于这个问题范围之外的原因,我想要保持原状.因此,而不是实际排序x的内容,我想创建另一个n个索引向量,其中每个索引引用x中的相应值,如果x被排序.

例如:

std::vector<int> x = {15,3,20};
std::vector<int> y;
// Put the sorted indices of x into the vector y
for (int i = 0; i < 4; i++)
{
    std::cout << y[i];
}

应该输出

2
1
0
3

对应于x中的值:

0
3
15
20

我可以想到很多及时的实现方法,但是我想知道STL是否有内置的功能可以有效地为我执行这个功能

解决方法

1)创建y作为索引的向量(整数范围)

2)使用从x返回索引元素的比较器对此范围进行排序
使用标准库,它给出:

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

int main() {

    std::vector<int> x = {15,20};

    std::vector<int> y;

    std::vector<int> y(x.size());
    std::size_t n(0);
    std::generate(std::begin(y),std::end(y),[&]{ return n++; });

    std::sort(  std::begin(y),[&](int i1,int i2) { return x[i1] < x[i2]; } );

    for (auto v : y)
        std::cout << v << ' ';

    return 0;
}

Live demo.

原文链接:https://www.f2er.com/c/112399.html

猜你在找的C&C++相关文章