让我们说我有一对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;
}
但有没有更好更有效的方法(例如,按位操作或其他方式)?
答案 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;
}