2011-09-07 110 views
4

假设我们有三个数组ab,并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

为什么'x [1000]'只使用4个元素? –

+0

没有关系,但你需要附上字符在' ''S:'字符C [1000] = {' A”, 'B', 'C', 'd'}'(除非他们是'char'变量别处定义) – carlpett

+0

哦对了,忘了感谢 – zeulb

回答

3

,你可以创建一个类ABC,将举行3场:诠释一,INT B,焦炭℃。
实施operator<这个类,并创建approppriate大小的ABC[]和填充它,使得ABC[i] = ABC(a[i],b[i],c[i])

执行operator<,所以它只会比较a,并在ABC数组上使用排序。

完成排序后,你有所需的顺序所有的元素,只是迭代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

+0

是的,这似乎是一个不错的选择...... – c0da

+0

你能告诉我的代码示例,因为我是新,因此并不真正明白 – zeulb

+0

@zeulb:我添加了一个代码示例 – amit

0

这不正是你需要的,但你可以使用的std ::地图和std ::排序实现类似的结果:

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