2015-10-08 22 views
1

可以说我有一双std::pair<int, int> s。每次我比较它们时,我都希望发出一个单独的代码以实现相等,越来越小(例如分别为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; 
} 

但有一个更好,更有效的方式来做到这一点(例如,位运算或其他什么东西)?

回答

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

3

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; 
} 

你可以使用一个条件表达式为简便起见,如果你真的想要的。