英文:
Symmetric pairing function for two numbers
问题
我想创建一个唯一的键,其中**i,j的值等于j,i的值。**我将在C++映射中使用它。
我有一个固定数量的元素,我想要在这个映射中拥有,同时i和j都大于或等于0。
例如:
i,j
0,1 -> 4
1,0 -> 4
3,4 -> 9
4,3 -> 9
然而,我似乎找不到一种方法。在C++中是否有一种有效的方法来实现这个?
英文:
I want to create a unique key where the value of i,j is equal to the value for j,i. I will use that for a C++ map.
I have a fixed number of elements I want to have inside this map and also i and j are both major or equal than 0.
For example:
i , j
0,1 -> 4
1,0 -> 4
3,4 -> 9
4,3 -> 9
However I can't seem to find a way. Is there something efficient to do that in C++?
答案1
得分: 1
假设存在一个大于 i
或 j
的数字 N:
uint32_t unique_key(uint32_t i, uint32_t j) {
if (i < j)
return i * N + j;
else
return j * N + i;
}
英文:
Assuming there exists a number N that is greater than i
or j
:
uint32_t unique_key(uint32_t i, uint32_t j) {
if (i < j)
return i * N + j;
else
return j * N + i;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论