如何在C++中重新排序矢量元素?

如何在C++中重新排序矢量元素?,c++,vector,iterator,C++,Vector,Iterator,我有一个对象的向量,我想以一个序列而不是最初存储的序列访问这些对象的元素。我最初的想法是创建一个指针数组,每个数组对象一个指针,然后将指针值移动到所需的顺序,这样底层数组就不需要更改 向量迭代器似乎类似于指针数组,但我无法确定它们是否可以重新绘制 有没有一个习惯的方法来做这件事 预计到达时间: @道格在下面的评论让我想到了另一条路,我想我把任务复杂化了。数组中的每个对象都有一个属性,该属性确定我要使用另一个属性的顺序。根据doug的建议,我可以遍历数组,写出两个新数组,每个属性一个,然后进行向量

我有一个对象的向量,我想以一个序列而不是最初存储的序列访问这些对象的元素。我最初的想法是创建一个指针数组,每个数组对象一个指针,然后将指针值移动到所需的顺序,这样底层数组就不需要更改

向量迭代器似乎类似于指针数组,但我无法确定它们是否可以重新绘制

有没有一个习惯的方法来做这件事

预计到达时间: @道格在下面的评论让我想到了另一条路,我想我把任务复杂化了。数组中的每个对象都有一个属性,该属性确定我要使用另一个属性的顺序。根据doug的建议,我可以遍历数组,写出两个新数组,每个属性一个,然后进行向量对排序。与@Ted Lyngmo的想法一致,也许我可以遍历数组,写出一个由两个属性组成的新结构数组,然后执行std::sort

ETA 2:
重要的是,对象的向量由外部库生成,属性仅通过方法调用公开。

尽管我的问题很糟糕,但这些回答帮助我找到了解决方案。仅供参考,以下是:

#include <algorithm>

using namespace std;

//structure to hold select data from array provided by external library
struct outdata
{
    string Sort; //data to be sorted
    double SortInfo1; //sort criteria1
    double SortInfo2; //sort criteria2
} od;

//function used to sort by criteria1 and then by criteria2
bool CompareFunc(const outdata& a, const outdata& b)
{ 
   if (a.SortInfo1 < b.SortInfo1) return true;
   if (b.SortInfo1 < a.SortInfo1) return false;

   // a=b for SortInfo1, go to SortInfo2
   if (a.SortInfo2 < b.SortInfo2) return true;
   if (b.SortInfo2 < a.SortInfo2) return false;

   return false;
} 

int main()
{
    vector<obj> source (getarray()); //array provided by external library

    vector<outdata> outarray; //array to hold data extracted from source
    
    //traverse source array and load select data to outarray
    for (vector<obj>::iterator it = source.begin(); it != source.end(); ++it)
    {
        od.Sort = it->getSort();
        od.SortInfo1 = it->getSortInfo1();  
        od.SortInfo2 = it->getSortInfo2();   
        outarray.push_back(od);
    }

    sort(outarray.begin(), outarray.end(), CompareFunc); //sort outarray

    //view results
    for (vector<outdata>::iterator it = outarray.begin(); it != outarray.end(); ++it)
    {
        printf("%s\n", it->Sort.c_str());
    }
}

这在很大程度上取决于您如何决定新序列应该是什么。e、 你是否碰巧有一个索引集合来告诉你新的顺序,或者你是用其他方式计算的?指针的问题是缺乏缓存局部性。如果空间受限,将向量更改为成对向量,索引作为第一对元素,原始类作为第二对元素,效果会更好。很容易去度假。这方面有很多变化。在大多数情况下,索引也比指针更节省空间。@doug感谢您向我介绍成对向量。这看起来对我来说是可行的。我想到了一个标准算法:@c2po不需要指针来做这件事。如所示,索引数组是一种不使用任何指针的方法。