排序一个数组和另外两个数组

时间:2011-09-07 07:06:45

标签: c++ arrays sorting

假设我们有三个数组abc

int a[1000] = {3,1,5,4};
int b[1000] = {7,9,11,3};
char c[1000] = {'A','B','C','D'};

然后对数组a进行排序,它变为:

a == {1,3,4,5}

是否可以安排其他两个数组按索引重新排列其元素,以便它们在已排序的数组a中镜像已排序元素的位置?在这个例子中,这应该导致

b == {9,7,3,11}
c == {'B','A','D','C'}

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

你可以创建一个类ABC,它将包含3个字段:int a,int b,char c。
为此类实现operator<,并创建适当大小的ABC[]并填充ABC[i] = ABC(a[i],b[i],c[i])

实现operator<,因此它只会比较a,并在ABC数组上使用sort。

完成排序后,按所需顺序排列所有元素,只需迭代ABC数组并填充其他数组。

编辑:

简化[和硬编码]代码示例:

#include <iostream>
#include <algorithm>
using namespace std;

class ABC { 
public: 
  int a,b;
  char c;
  bool operator<(const ABC& other) const { 
    return a < other.a;
  }
};
int main() { 
  int a[4] = {3,1,5,4};
  int b[4] = {7,9,11,3};
  char c[4] = {'A','B','C','D'};
  ABC abc[4];
  for (int i = 0; i< 4; i++) { 
    abc[i].a = a[i];
    abc[i].b = b[i];
    abc[i].c = c[i];
  }
  sort(abc,abc+4);
  for (int i = 0; i < 4; i++) { 
    a[i] = abc[i].a;
    b[i] = abc[i].b;
    c[i] = abc[i].c;
  }
  cout << "a= [" << a[0] << ", " << a[1] << ", " << a[2] << ", " << a[3] << "]" << endl;
  cout << "b= [" << b[0] << ", " << b[1] << ", " << b[2] << ", " << b[3] << "]" << endl;
  cout << "c= [" << c[0] << ", " << c[1] << ", " << c[2] << ", " << c[3] << "]" << endl;
  return 0;
}

在键盘上对我有用:http://codepad.org/eCyNkyqR

答案 1 :(得分:0)

这不完全是你需要的,但你可以通过使用std :: map和std :: sort来实现类似的结果:

std::map<int, std::pair<int, char> > someArray;