我经常遇到这样的情况,尤其是在 C++ 中排序时,我正在比较一系列字段以比较更大的结构。一个简化的例子:
struct Car{
Manufacturer make;
ModelName model;
Year year;
};
bool carLessThanComparator( const Car & car1, const Car & car2 ){
if( car1.make < car2.make ){
return true;
}else if( car1.make == car2.make ){
if( car1.model < car2.model ){
return true;
}else if( car1.model == car2.model ){
if( car1.year < car2.year ){
return true;
}
}
}
return false;
}
我本能的做法似乎很麻烦,尤其是对于3个以上的领域。您将如何在 C++ 中构建这一系列的比较?其他语言是否提供更简洁或更优雅的语法?
最佳答案
好吧,如果您的函数在 if 子句中返回,则不需要显式 else ,因为它已经退出了。这可以节省“缩进谷”:
bool carLessThanComparator( const Car & car1, const Car & car2 ) {
if( car1.make < car2.make )
return true;
if ( car1.make != car2.make )
return false;
if( car1.model < car2.model )
return true;
if( car1.model != car2.model )
return false;
if( car1.year < car2.year )
return true;
return false;
}
我也喜欢 MarkusQ 的 LISPish 短路方法。