如果我有一个我希望能够排序的类(即支持小于概念),并且它有几个数据项,因此我需要进行字典排序,那么我需要这样的东西:

struct MyData {
  string surname;
  string forename;

  bool operator<(const MyData& other) const {
    return surname < other.surname || (surname==other.surname && forename < other.forename); }
};

对于具有超过 2 个数据成员的任何内容,这变得非常难以管理。有没有更简单的方法来实现它?数据成员可以是任何 Comparable 类。

最佳答案

tuple 是个好主意,但如果您想继续为您的成员变量命名,那么像这样重构比较函数可能就足够了:

struct MyData {
    string surname;
    string forename;
    string var;
    // ...

    bool operator<(const MyData& other) const {
        if (surname != other.surname) return surname < other.surname;
        if (forename != other.forename) return forename < other.forename;
        if (var != other.var) return var < other.var;

        // ...

        return false; //< They are equal
    }
};

根据您的喜好,您甚至可能需要像 #define COMPARE(field) if (field != other.field) return field < other.field; 这样的宏来减少重复。然后该函数将成为 COMPARE 调用的列表。

关于c++ - 为类的元素定义字典比较的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2500664/

10-14 08:21