c++ - 进行顺序比较的优雅方式 (C++)

标签 c++ class comparison

假设我有一个包含多个成员变量的类:

class MyClass{
    std::string a;
    int b;
    SomeOtherClass c;
    // some stuff...
public:
    // some other stuff...
};

我想定义首先比较 operator< 的关系运算符( a 等) , 但如果 a相等,比较b , 但如果 b相等,比较c . (我们假设 SomeOtherClass 已经定义了关系运算符。)所以我有类似的东西

bool operator==(MyClass param){
    return (a == param.a) && (b == param.b) && (c == param.c);
}

bool operator<(MyClass param){
    if(a < param.a) return true;
    if(a > param.a) return false;
    if(b < param.b) return true;
    if(b > param.b) return false;
    if(c < param.c) return true;
    return false;
}

等等。有没有更优雅的方法来做到这一点?这看起来很麻烦,尤其是当有很多成员变量需要比较时。 (升压是一种选择。)

最佳答案

是的,我常见的有两种方式:

bool operator<(MyClass param){
    if(a != param.a) return a<param.a;
    if(b != param.b) return b<param.b;
    return c<param.c;
} 

http://coliru.stacked-crooked.com/view?id=dd70799c005e6e99c70ebda552161292-c96156d6cc95286981b0e9deef2eefae

bool operator<(MyClass param){
    return std::tie(a, b, c)<std::tie(param.a, param.b, param.c);
}

http://coliru.stacked-crooked.com/view?id=00278eaca0d73b099fcd8edf87b5057b-c96156d6cc95286981b0e9deef2eefae

关于c++ - 进行顺序比较的优雅方式 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363859/

相关文章:

Java大类组织

javascript - 你如何比较两个函数在 Javascript 中的行为是否相同?

c++ - 来自编程珍珠的 bsort 示例

c++ - 控制台程序中的定时器

c++ - 在 C++11 std::atomic 中,用于++、-- 和 += 等运算符的 memory_order 是什么?

Python - doctest 与 unittest

php - 在比较 PHP 中的字符串之前使编码统一

c++ - MySQL C++ 连接器安装

初学者Java汽车类(class)

Java 设计问题 - 类、函数、访问修饰符