jas*_*ray 4 c++ language-features coding-style lexicographic stdtuple
我经常遇到情况,特别是在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;
}
Run Code Online (Sandbox Code Playgroud)
我的本能方法似乎很麻烦,特别是对于超过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;
}
Run Code Online (Sandbox Code Playgroud)
我也喜欢MarkusQ的LISPish短路方法.