← 模式
字典序
12345678910111213141516171819 | #include <tuple> class foo { public: foo(int n_, char c_, double d_) : n{n_ |
此模式采用 CC0 公共领域贡献 许可。
需要 c++11 或更新版本。
意图
在类的成员之间实现字典序比较。
描述
在第 3-19 行的 foo 类中,有三个成员变量 n、c 和 d,它们在第 16-18 行声明。我们希望为 foo 实现一个排序关系,其中这些成员按字典序进行比较。
正确实现 3 个或更多元素的排序关系是繁琐且容易出错的。幸运的是,标准库为 std::tuple 提供了字典序比较,我们可以利用它。
在第 10-14 行定义的 foo 的小于运算符,会首先比较成员 n,如果 n 相等,则比较 c,如果 n 和 c 都相等,最后比较成员 d。为了实现这一点,我们在第 12 行和第 13 行使用 std::tie,分别创建包含左操作数和右操作数成员引用的 std::tuple。对这些 std::tuple 进行比较,就实现了对其成员的字典序比较。