分别比较对是否相等,越来越少。

时间:2015-10-08 09:34:14

标签: 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;
}

但有没有更好更有效的方法(例如,按位操作或其他方式)?

2 个答案:

答案 0 :(得分:3)

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; } 已经通过标准运算符公开了词典排序,因此您可以使用它们:

urls = ["/url/file_1", "/url/file_2", "/url/file_3" ... "/url/file_n"]

如果你真的想要,可以使用条件表达式来简洁。

答案 1 :(得分:1)

如果您不坚持值-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