我想用两个键 - 'x'和'y'来创建结构存储值。我以为我会使用std :: map>。但我认为最好只使用一个std :: map并将两个键组合成一个键(我将其称为'p')。
所以我需要函数p->(x,y)和函数(x,y) - > p。 'x'和'y'都是允许负值的整数类型。
我认为这应该是可能的,但我很惊讶我没有在网上找到大量关于它的文章。
我有一些关于如何做的想法,但似乎都太复杂了。能否请您就如何做到这一点或有关此问题的主题提供一些建议?
可能的映射示例(但我需要类似的数学形式):http://i.stack.imgur.com/UbVaM.png
感谢您的任何建议: - )
答案 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();
答案 2 :(得分:0)
您可以尝试使用与用于显示与整数一样多的分数的函数。这给出了每个分数的唯一整数和每个正整数的唯一分数。它对x,y坐标也同样有效。两个函数p->(x,y)和(x,y) - > p稍微复杂但可以写入。您可以使用某种螺旋形状来调整这个想法。
。
来自https://commons.wikimedia.org/wiki/File:Diagonal_argument.svg的图片