映射具有两点的1D阵列

问题描述:

我想存储一维数组arr的随机快照,使用2点映射表示a,b用于动态程序。好比说映射具有两点的1D阵列

P1 => (4,5) = [1,1,0,2,1] 
P2 => (10,13) = [5,6,3,4,3] 
P3 => (15,23) = [11,13,9,12,14] 

等等..... 后来我需要把它们添加到也具有n个元素,如改编阵列A。 喜欢说A = [1,1,1,1,1]

所以现在P1后,我有A为:[2,2,1,3,2],并以此类推,直到P结束。 我不知道如何映射这些点P1,P2 ...与数组arr,然后再与数组A求和。 我尝试使用3D数组来存储这些点,然后数组。但它看起来很笨重,并没有在一个有效的办法。 任何帮助表示赞赏。

您可以使用

std::map<std::pair<int, int>, std::vector<int>> m; 

,那么你可以使用它作为m[{10, 20}].push_back(42);

在例如问题中的数据可以存储与

m[{4, 5}] = {1, 1, 0, 2, 1}; 
m[{10, 13}] = {5, 6, 3, 4, 3}; 
m[{15, 23}] = {11, 13, 9, 12, 14}; 
+0

我可以存储所有它们中的一次,如'米[性病:: make_pair(10,20)] = [1,2,3,4,5]' –

+0

@hemant_:确定...看到你的数据添加的例子 – 6502

根据这个答案张贴GManNickG https://stackoverflow.com/a/2197015/7943474,联合国unordered_map将使用更多的内存,但在你的情况下,它可以更快,因为你不是一旦初始化您的数据集,就会添加/删除点。

在这种情况下,你应该考虑:

#include <unordered_map> 

std::unordered_map<std::pair<int, int>, std::vector<int>> uMap; 

,然后插入你的元素:

std::pair<int, int> point(4, 5); 
std::vector<int> arr; 
arr.push_back(1); 
arr.push_back(1); 
and so on.. 

uMap.insert(point, arr); 

要查找和元素在UMAP,你可以使用find()方法:

std::unordered_map<std::pair<int, int>, std::vector<int>>::const_iterator it = uMap.find(point); 

然后更新数据与

it->second[0] + A[0]; 
it->second[1] + A[1]; 
and so on.. 

有关详细参考见http://www.cplusplus.com/reference/unordered_map/unordered_map/