Tag: strict weak ordering

通过“tuple”和“tie”来实现比较运算符,这是一个好主意吗?

(注: tuple和tie可以从Boost或C ++ 11中取得) 在编写只有两个元素的小型结构时,我有时会倾向于select一个std::pair ,因为所有重要的东西都已经为该数据types完成了,比如operator< for strict-weak-ordering。 缺点虽然是几乎没用的variables名称。 即使我自己创build了typedef ,两天之后我也不会记得first和second是什么,特别是如果它们是同一types的话。 这对于两个以上的成员来说更糟,因为嵌套pair非常糟糕。 另一种select是从Boost或C ++ 11中得到一个tuple ,但是看起来并没有更好更清晰。 所以我回到自己编写结构,包括任何需要的比较运算符。 由于特别是operator<可能相当麻烦,所以我想通过仅仅依赖于为tuple定义的操作来规避这个混乱: operator<例如严格弱sorting的例子: bool operator<(MyStruct const& lhs, MyStruct const& rhs){ return std::tie(lhs.one_member, lhs.another, lhs.yet_more) < std::tie(rhs.one_member, rhs.another, rhs.yet_more); } ( tie从所传递的参数构成T&引用。) 编辑 :从@DeadMG私人从tupleinheritance的build议不是一个坏的,但它有一些缺点: 如果运营商是独立的(可能是朋友),我需要公开inheritance 通过投射,我的function/操作员(特别是operator= )可以轻松绕过 有了这个tie解决scheme,如果他们对订购无关紧要,我可以省略某些成员 这个实现有什么缺点,我需要考虑吗?

运营商<和严格的弱秩序

如何在n元组(例如3元组)上定义operator<它满足严格的弱排序概念? 我知道boost库具有正确定义的operator<元组类,但由于某些原因,我无法使用它。