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

Comparing pairs separately for equality, less and greater.

假设我有一对 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;
}

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

如果您不坚持使用值 -1、0 和 1,但也可以接受负数、0 和正数作为结果,这是我能想到的最快速度:

#include <utility>
#include <stdint.h>

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

程序集:http://goo.gl/Kx4SP4