如何简化检查一对数字是 (1,2) 还是 (2,1)?

Max*_*kov 6 c c++ logic

我需要确保一对数字是 (1, 2) 或 (2, 1)。x 和 y 始终为正。我现在使用的代码:

if ((x == 2 && y == 1) ||
    (x == 1 && y == 2)) {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

看起来有点笨重,感觉可以简化一下。然而,我尝试的一切都导致了误报。

dbu*_*ush 12

这是进行这种比较的最直接方式。

它也比您可能想出的任何替代方案更具可读性,因此无需更改它。


cig*_*ien 7

这是我认为更具可读性的一种编写方法:

if (std::set{x,y} == std::set{1,2})
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不如您问题中的版本有效。例如,不要在将作为库发布的代码中编写此代码。但是,当性能不是问题时,在您自己的程序中编写这是完全合理的。

这是一个演示

  • 这是一段非常昂贵的代码。这个答案确实应该被贴上“开玩笑”的标签。 (4认同)
  • @cigien — 像真正的 Python 程序员一样说话。<g> (4认同)