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;
}
大会: