c++ - 分别比较对的相等性、更小和更大。

标签 c++ compare comparison std-pair

假设我有一对 std::pair<int, int>秒。我希望每次比较它们时都发出一个单独的代码来表示相等性、较小和较大(例如,分别为 0、-1 和 1)。

天真的方法是写一些 if - else代码:

int compare_int_pairs(std::pair<int, int> const &p1_, std::pair<int, int> const &p2_) {
  if(p1_.first < p2_.first) {
    return -1;
  } else if(p1_.first > p2_.first) {
    return 1;
  } else {
     if(p1_.second < p2_.second) {
       return -1;
     } else if(p1_.second > p2_.second) {
       return 1;
     } else {
       return 0;
     }
  }

  return 0;
}

但是是否有更好、更有效的方法来执行此操作(例如,按位运算或其他方法)?

最佳答案

std::pair 已经通过标准运算符公开了字典顺序,因此您可以直接使用它们:

int compare_int_pairs(std::pair<int, int> const &p1_, std::pair<int, int> const &p2_) {
  if (p1_ < p2_) return -1;
  if (p1_ > p2_) return 1;
  return 0;
}

如果您确实需要,可以使用条件表达式来简洁。

关于c++ - 分别比较对的相等性、更小和更大。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011898/

相关文章:

c++ - opengl - 如何在 3D 不规则物体上放置纹理

powershell - 比较新的时间跨度总时间..未按预期运行

c# - 在 C# 中比较两个结构的值

C: 字符串中的字符与 '\0' 之间的比较不起作用?

Java:使用二元运算符比较两个数组

c++ - 检查可调用模板参数类型

c++ - 如何在 3DS Max 中为 Direct3D 动画 Controller 定义动画集

c++ 和 gtest,需要帮助理解为什么看似简单的测试失败

C++ 两个 n 大小的整数列表

c++ - std::string resize 正在破坏比较运算符 (==)