参见英文答案 >
c++ sort keeping track of indices4个
变量x是n个int的向量,我想以升序对向量进行排序.但是,由于这个问题范围之外的原因,我想要保持原状.因此,而不是实际排序x的内容,我想创建另一个n个索引向量,其中每个索引引用x中的相应值,如果x被排序.
变量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
解决方法
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; }