c++ - 您如何构建比较函数?

标签 c++ coding-style language-features 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;
}

我的直觉方法似乎很麻烦,尤其是对于 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 短路方法。

关于c++ - 您如何构建比较函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597532/

相关文章:

c++ - C++ 中的 InputMap 的双重调度失败 - 代码简化为简单

Kotlin 编码约定 : Horizontal whitespace

php - 反对使用 "<?="的论点是什么?

Java 语言规范 : "an invocation of Class" as return type of method in annotation type

perl - 用于 Perl Web 开发的 ASP 样式标签?

c++ - 如何将元素添加到元组 vector

C++ 像 lower_bound 这样的二进制搜索

c++ - 将 C 字符串转换为 unsigned char 指针

PHP if else - 正确使用 "else"

c# - 编写此 if..then 逻辑的最简洁方法是什么?