格式化顺序IF语句具有相似返回(C )

Formatting of sequential if statements with similar returns (C++)

本文关键字:返回 相似 顺序 IF 语句 格式化      更新时间:2023-10-16

在我的程序中,我使用地图map<name,labscores>存储成对的类,以存储有关学生及其成绩的数据。如果第一个的平均值低于第二个,则 operator<的过载将返回true,但是如果它们相等,则检查中间的中位数较小,然后是一个较小的名称。Data_t类包含指向特定对的地图的迭代器。

bool operator<(const data_t &d){
    if(it->second.get_mean() < d.it->second.get_mean())
        return true;
    else if((it->second.get_mean() == d.it->second.get_mean()) && (it->second.get_median() < d.it->second.get_median()))
        return true;
    else if((it->second.get_mean() == d.it->second.get_mean()) && (it->second.get_median() == d.it->second.get_median()) && (it->first < d.it->first))
        return true;
    else
        return false;
}

上面的代码有效,但是我正在尝试学习更有效的编码方法,我想知道是否有一种更简单的方法来执行此操作,或者是否有可以提供帮助的命令。

我认为if ... return ... else是凌乱的编码,因为else完全是多余的。

您可以通过应用该指南以及一些明智的可变用法来整理您的代码,以使其更可读性,例如:

bool operator<(const data_t &d) {
    // Check means first.
    auto myMean = it->second.get_mean();
    auto otherMean = d.it->second.get_mean();
    if(myMean < otherMean) return true;
    if(myMean > otherMean) return false;
    // Means are equal, medians comes into play.
    auto myMedian = it->second.get_median();
    auto otherMedian = d.it->second.get_median();
    if (myMedian < otherMedian) return true;
    if (myMedian > otherMedian) return false;
    // Means and medians are equal, use the names.
    return (it->first < d.it->first);
}