用1D序列覆盖2D空间

时间:2014-09-09 19:33:20

标签: c++ math mapping space

我想用两个键 - 'x'和'y'来创建结构存储值。我以为我会使用std :: map>。但我认为最好只使用一个std :: map并将两个键组合成一个键(我将其称为'p')。

所以我需要函数p->(x,y)和函数(x,y) - > p。 'x'和'y'都是允许负值的整数类型。

我认为这应该是可能的,但我很惊讶我没有在网上找到大量关于它的文章。

我有一些关于如何做的想法,但似乎都太复杂了。能否请您就如何做到这一点或有关此问题的主题提供一些建议?

可能的映射示例(但我需要类似的数学形式):http://i.stack.imgur.com/UbVaM.png

感谢您的任何建议: - )

3 个答案:

答案 0 :(得分:1)

我只会使用std::map<std::tuple<int,int>, int>,例如tuple(x,y)且值为z。否则,很难保持p(x,y)z的一对一映射。

答案 1 :(得分:0)

如何使用union?

union p_t {
    p_t(int64_t c) : k(c) {}
    p_t(int32_t a, int32_t b) : x(a), y(b) {}
    int64_t k;
    struct { int32_t x, y; };
};

std::map<decltype(p_t::k), int> m1;
std::unordered_map<decltype(p_t::k), int> m2;
p_t p = p_t(rand(), rand());
m1[p.k] = rand();
m2[p.k] = rand();

实例:http://ideone.com/jebyG6

答案 2 :(得分:0)

您可以尝试使用与用于显示与整数一样多的分数的函数。这给出了每个分数的唯一整数和每个正整数的唯一分数。它对x,y坐标也同样有效。两个函数p->(x,y)和(x,y) - > p稍微复杂但可以写入。您可以使用某种螺旋形状来调整这个想法。

assigning integers to fractions form wikipedia Rational_number

来自https://commons.wikimedia.org/wiki/File:Diagonal_argument.svg的图片