gpt4 book ai didi

c++ - 通过 'tuple' 和 'tie' 实现比较运算符,好主意吗?

转载 作者:IT老高 更新时间:2023-10-28 11:57:08 26 4
gpt4 key购买 nike

(注意:tupletie 可以取自 Boost 或 C++11。)
在编写只有两个元素的小型结构时,我有时倾向于选择 std::pair ,因为该数据类型的所有重要工作都已完成,例如 operator<用于严格弱排序。
缺点是几乎没有用的变量名。即使我自己创造了 typedef , 2天后我不记得了first什么second确实如此,尤其是当它们都是同一类型时。对于两个以上的成员,情况会变得更糟,因为嵌套 pair真的很烂。
另一个选项是 tuple ,来自 Boost 或 C++11,但这看起来并没有更好更清晰。所以我回去自己编写结构,包括任何需要的比较运算符。
因为尤其是 operator<可能很麻烦,我想通过仅依靠为 tuple 定义的操作来规避整个困惑。 :

operator< 的示例,例如对于严格-弱排序:

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 从传递的参数中产生 tupleT& 引用。)


编辑:@DeadMG 建议私下继承 tuple不是一个坏的,但它有很多缺点:

  • 如果运营商是独立的(可能是 friend ),我需要公开继承
  • 通过强制转换,可以轻松绕过我的函数/运算符(具体为 operator=)
  • tie解决方案,如果某些成员对订购无关紧要,我可以省略它们

我需要考虑此实现中的任何缺点吗?

最佳答案

这肯定会让编写一个正确的运算符比自己滚动它更容易。如果分析显示比较操作是您的应用程序的一个耗时部分,我会说只考虑一种不同的方法。否则,维护它的便利性应该超过任何可能的性能问题。

关于c++ - 通过 'tuple' 和 'tie' 实现比较运算符,好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com