【发布时间】:2009-02-28 05:10:20
【问题描述】:
我经常遇到这样的情况,尤其是在 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++ 中构建这一系列比较?其他语言是否提供更简洁或更优雅的语法?
【问题讨论】:
-
个人风格 - 我会实现一个类似
strcmp()的函数(或方法),如果 a 等于 b,则返回 0,如果 a 大于 b,则返回 1,如果 a 小于 b,则返回 -1 ,然后根据比较函数定义比较运算符(如果您愿意)和/或方法。那么我们就只有bool carLessThanComparator( const Car & car1, const Car & car2 ) { return cmp(car1, car2) == -1; }
标签: c++ coding-style language-features lexicographic stdtuple