【问题标题】:More than 2 variables in std::pairstd::pair 中超过 2 个变量
【发布时间】:2014-12-21 21:09:06
【问题描述】:

pair 看起来像这样:

std::vector<std::pair<uint64 /*id*/, std::string /*message*/>

如果我想要vector 中的 3 个变量?我可以使用pair还是什么?

【问题讨论】:

  • 使用std::tuple
  • 考虑使用结构。这样成员就会有有意义的名字。
  • 是什么让您无法简单地通读 C++ 标准库参考资料以找到合适的工具???
  • 什么?当 SO 上的一些傻瓜免费为您完成工作时,为什么还要阅读无聊的库文档?

标签: c++


【解决方案1】:

有时我发现在 C++ 中定义琐碎的全公共数据类非常有用,例如

struct Event {
    int id = 0;
    std::string msg = "";
    double time = 0.;
};

确实有点打字,但 IMO 比在代码中的任何地方都必须使用 e.secondstd::get&lt;1&gt;(e) 而不是 e.msg 更好。

写一次,读多次。以增加阅读/理解时间为代价来节省写作时间是一个非常糟糕的主意。

这种方法的缺点是您无法访问元程序中结构的第 n 个成员,但是由于许多其他原因,C++ 元编程无论如何都非常弱,所以如果您真的需要非平凡的元代码,我' d 建议放弃 C++ 并使用以体面的语言编写的外部 C++ 代码生成器,而不是模板技巧和黑客。

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以使用在标头&lt;tuple&gt; 中声明的std::tuple。例如

    std::vector<std::tuple<uint64, std::string, SomeOtherType>> v;
    

    【讨论】:

      【解决方案3】:

      如果你不想要C++11,你可以使用

      std::pair<uint64, std::pair<std::string, SomeOtherType> >
      

      但这就像试图将三个值放入一个一样是错误的。为什么我认为它是错误的? pair 表示 两个 值。如果您将 三个 或任何其他数量的值放在 pair 中,则您正在执行类似this 的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多