我在vector< vector<double> >
ex A[0][1].............[N], and A[0][0] = X, A[0][1] = Y, A[0][2] = Z
我希望对所有维度
的矢量进行排序ex sort X, Y, Z ,.........N in ascending order
ex A[0] = (1,5,3), A[1] = (3,2,1) A[2] = (2,8,4) after sorting
index: 0 1 2
A[0] = (1,5,3), A[1] = (2,8,4) A[2] = (3,2,1)
original index : 0 2 1
我发现sort(vector.begin(), vector.end())
可以对其进行排序,但如何使用其他向量记录原始索引?
是否有算法或C ++功能可以解决它?
提前谢谢。答案 0 :(得分:1)
您需要以某种方式保留有关索引的信息。 我可以看到两种方法:
1 - 由于您通过向量表示您的点,您可以使用另一个代表原始索引的维度:
//添加索引信息,重要的是索引是最后一个维度,否则排序不正确 for(auto point = vector.begin(),unsigned int index = 0; point!= vector.end(); ++ point,++ index){ 点对多点&GT;的push_back(指数) };
然后按照现在的方式进行排序:
sort(vector.begin(),vector.end())
并使用A [0] [n]
访问原始索引很酷的是,它允许您以非常方便的方式跟踪索引,但是您需要能够修改您的点的表示。
2-另一种方法是拥有一个索引的外部表,并使用自定义comp进行排序。运营商:
首先创建一个索引向量
std :: vector indices(vector.size());
for(unsigned int index = 0; index!= indicies.size(); ++ point){ 指标[指数] =指数; };
//并排序......
std :: sort(indices.begin(),indices.end(),[&amp;](unsigned int i,unsigned int j){return vector [i]&lt; vector [j]})
现在您需要一个额外的间接级别来按顺序排列您的点数: A [指数为[0]],A [指数[1]],... 所以A [indices [x]]的原始位置只是x
要记住这两种方式之间的主要原因是,在第一次移动数据时而不是在第二次移动数据时,根据您在点上的操作,可能会更好一点