C++ 分别比较两对是否相等、更少和更大。

C++ 分别比较两对是否相等、更少和更大。,c++,compare,comparison,std-pair,C++,Compare,Comparison,Std Pair,假设我有一对std::pairs。我希望每次比较它们时,都能发出一个单独的代码,表示相等、较小和较大(例如,分别为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

假设我有一对
std::pair
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;
}
int比较int对(std::pair const&p1,std::pair const&p2){
if(p1_u.firstp2_uu.first){
返回1;
}否则{
如果(p1秒p2秒){
返回1;
}否则{
返回0;
}
}
返回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;
}
int比较int对(std::pair const&p1,std::pair const&p2){
if(p1_up2_u)返回1;
返回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;
}
int比较int对(std::pair const&p1,std::pair const&p2){
if(p1_up2_u)返回1;
返回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;
}
#包括
#包括
整数比较整数对(std::pair const&p1,std::pair const&p2){
int-ret=p1_u.first-p2_u.first;
如果(ret==0)ret=p1_u2;秒-p2_2;秒;
返回ret;
}

汇编:

如果您不坚持使用值-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;
}
#包括
#包括
整数比较整数对(std::pair const&p1,std::pair const&p2){
int-ret=p1_u.first-p2_u.first;
如果(ret==0)ret=p1_u2;秒-p2_2;秒;
返回ret;
}
大会: