假设我们有三个数组a
,b
和c
:
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'}
我怎样才能做到这一点?
答案 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;