当面对仅包含两个元素的小型结构时,许多人选择标准对,因为定义的必要性,例如严格弱排序运算符。然而,这种方法因其无信息的变量名称而带来了挑战,特别是在处理多个元素或嵌套对时。
另一种方法是使用来自 Boost 或 C 11 的元组。虽然它们提供了更干净的外观,但它们比较时仍然涉及复杂性。为了寻求更简化的解决方案,一些人考虑通过仅依赖元组操作来规避此问题。
例如,可以使用 tie 编写严格弱排序运算符,它根据提供的参数形成 T&A 引用的元组:
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); }
这种优雅的方法可以轻松进行比较操作。然而,考虑缺点仍然很重要。一个问题是当操作者是独立的或朋友时,在这种情况下公共继承可能是必要的。这可能会导致函数或运算符(特别是operator=)被绕过的漏洞。此外,关系可能会排除与排序无关的成员,从而可能引入复杂性。
最终,使用此方法的决定应基于其性能影响。虽然它确实简化了操作符代码,但如果分析表明比较操作很耗时,就会出现问题。否则,维护的便利性可能会超过任何潜在的缺点。
以上是在 C 中使用 `std::tie` 进行元组比较是明智的方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!