← 模式
字典序
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
进行比较,就实现了对其成员的字典序比较。