我想使用2个点arr
的映射来存储一维数组a,b
的随机快照,以便在动态程序中使用。比如说
P1 => (4,5) = [1,1,0,2,1]
P2 => (10,13) = [5,6,3,4,3]
P3 => (15,23) = [11,13,9,12,14]
等等......
稍后我需要将它们添加到数组A
,它也有像arr这样的n个元素。
比如说A = [1,1,1,1,1]
所以现在P1
后{i} A
为:[2,2,1,3,2]
等等,直到P结束。
我不确定如何将这些点P1,P2 ...
映射到数组arr
,然后将其与数组A相加。
我尝试使用3D数组存储这些点然后存储数组。但它看起来很笨重而且没有以有效的方式使用。
任何帮助表示赞赏。
答案 0 :(得分:2)
您可以使用
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};
答案 1 :(得分:0)
根据GManNickG https://stackoverflow.com/a/2197015/7943474发布的这个答案,un unordered_map将使用更多内存,但在你的情况下它可以快得多,因为一旦你初始化你的数据集你就不会添加/删除点。 / p>
在这种情况下,您应该考虑:
#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/