C++ C++;,同时对不同的数组进行排序

C++ C++;,同时对不同的数组进行排序,c++,arrays,sorting,struct,C++,Arrays,Sorting,Struct,考虑这样一种情况,结构中的“rowPtr”、“colInd”和“values”动态分配相同数量的元素。在这个场景中,最快的排序方法是什么(如果可能的话不需要复制!!)来对colInd的元素进行排序,以便根据colInd的元素如何改变位置来交换rowPtr和value元素或改变位置 struct csr { int rows; int cols; int nzmax; int *rowPtr; int *colInd; double *values;

考虑这样一种情况,结构中的“rowPtr”、“colInd”和“values”动态分配相同数量的元素。在这个场景中,最快的排序方法是什么(如果可能的话不需要复制!!)来对colInd的元素进行排序,以便根据colInd的元素如何改变位置来交换rowPtr和value元素或改变位置

struct csr
{
    int rows;
    int cols;
    int nzmax;
    int *rowPtr;
    int *colInd;
    double *values;
};
// A simple example without a struct. Just based on arrays
double values[10] = {0.2135, 0.8648, 7, 0.3446, 0.1429, 6, 0.02311, 0.3599, 0.0866, 8 };
int rowPtr[10] = { 0, 3, 6, 10, 2 -1, 24, -4, 1, 11 };
int colInd[10] = { 0, 2, 4, 1, 2, 3, 0, 1, 2, 4 };
// sort colInd and simultaneously change positions in rowPtr and values
//After sorting
Values = {0.214, 0.023, 0.345, 0.360, 0.865, 0.143, 0.087, 6.0};
rowPtr = {0, 24, 10, -4, 3, 2, 1, -1};
colInd  = {0, 0, 1, 1, 2, 2, 2, 3};

我建议将这三个数组放入
struct
数组中,并对
struct
数组进行排序

struct csr_data
{
    int rowPtr;
    int colInd;
    double value;
};


您可以使用三个成员变量中的任意一个对csr_数据数组进行排序。排序后,
csr\u数据的所有元素
都将重新排列,无论您使用哪个成员对数据进行排序。

每当您在
coll中进行更改时
都会在其他成员中进行相应的更改。我误解你了吗?是的,其他阵列中也会发生相同的更改。如果可能,请重新考虑您的数据结构。让一个结构包含三个成员(两个int和一个double),让
csr
保存这些结构的数组(或者更好的是,
std::vector
)。然后,您可以使用带有适当比较谓词的
std::sort
。虽然我不喜欢它,但struct已经成为一种必要的格式,因为它是以前创建的C库所必需的格式
struct csr
{
    int rows;
    int cols;
    int nzmax;
    csr_data* data_array;
};