映射具有两点的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};
答
根据这个答案张贴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/
我可以存储所有它们中的一次,如'米[性病:: make_pair(10,20)] = [1,2,3,4,5]' –
@hemant_:确定...看到你的数据添加的例子 – 6502