用两个点映射1D数组

时间:2017-09-02 06:47:13

标签: c++ arrays

我想使用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数组存储这些点然后存储数组。但它看起来很笨重而且没有以有效的方式使用。 任何帮助表示赞赏。

2 个答案:

答案 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/