对两个数字的对称配对函数

huangapple go评论71阅读模式
英文:

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

假设存在一个大于 ij 的数字 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 &lt; j)
    return i * N + j;
  else
    return j * N + i;
}

huangapple
  • 本文由 发表于 2020年1月3日 20:23:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/59578592.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定