2014-09-29 108 views
0

我有一个数组(1D),其他数组的大小相同,不同,的顺序(根据程序情况会有所不同)也应该有相同的值。我们可以将数组映射到C中的另一个数组,如映射文件吗?

例如:

array1 = {1,2,3,4,5}; 

因此数组2,可以自动取得,

array2 = {4,2,3,1,5}; 

有些东西你可以说,我想根据我的唯一参考混杂了值。但是,只要父数组1发生更改,array2也应该在其各自的索引处更新。它甚至有可能吗?数组内存映射?循环和保存到其他数组需要时间,因为此操作会迭代多次。我不能做memcpy,因为顺序可以不同。任何指针/帮助/建议将不胜感激。

+0

您的意思是'int * array2 = array1'? – nu11p01n73R 2014-09-29 10:55:58

+0

没有。顺序会有所不同。正如我在示例中显示的那样。 – 2014-09-29 10:56:41

回答

1

有没有不可思议的方式来做到这一点。你需要做的是将实际值存储在某个地方,然后通过单独存储的permutation访问它们。下面是一些使用字符串的示例代码,因此排列和值显然是不同的:

char *strings[] = {"foo", "bar", "baz", "quux"}; 

size_t memory_order[] = {0, 1, 2, 3}; 
size_t sorted_order[] = {1, 2, 0, 3}; 

// Get the k'th element in the memory order: 
strings[memory_order[k]]; 

// Get the k'th element in the sorted order: 
strings[sorted_order[k]]; 
+0

谢谢。如果我的两个数组的排列顺序相同,那么它们都可以正确映射? (我想跳过memcpy,我只想使用映射) – 2014-09-29 11:00:24

+0

@Vishwadeep:你为什么要这么做?只需使用指向相同数组的两个指针即可。 – 2014-09-29 11:01:19

+0

是的。只是想学习内存映射。只是看内存映射的能力..是否有可能? – 2014-09-29 11:02:36

1

不直接,没有。 C没有指定一种方法来做到这一点(这对我来说很有意义,因为大多数计算机都没有,而C趋向于相当接近金属)。

的典型方法来解决它是手动执行过程的重映射,:

static const size_t map1to2[] = { 3, 1, 2, 0, 4 }; 

然后通过重映射执行访问array2

printf("array2[3] is %d\n", array1[map1to2[3]]); 

这将映射的索引30,因此打印1

您可以使用宏来使其稍微更易于管理。

+0

好的。你的建议宏。但是,从计算的角度来看,负载会一样吗?对? – 2014-09-29 10:58:31

+0

但是,“不直接”给了我整个答案。 – 2014-09-29 11:01:38