2015-10-08 56 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; 
} 

你可以使用一個條件表達式爲簡便起見,如果你真的想要的。