提问人:Anon 提问时间:2/21/2016 更新时间:3/23/2022 访问量:10445
是否有 QPair 类,但用于三个 + 项目而不是两个?
Is there a QPair class, but for three+ items instead of two?
答:
5赞
Simply Me
2/21/2016
#1
您可以使用 创建自己的结构。上次我用这样的东西来实现你说的。Qpair<Qpair<item1, item2>, item3>
请注意,要使所有操作正常工作,您需要覆盖它们。第一项是组合项(item1+item2 对)。
评论
0赞
Anon
2/21/2016
我在想那个,但它很乱。点赞,但不被接受。
1赞
Simply Me
2/21/2016
实际上,这要视情况而定。您只需要覆盖操作并确保以正确的方式进行比较。我是从我的经验中这么说的。item1
item2
1赞
BartoszKP
2/21/2016
@SimplyMe 即使使用元组也被认为是混乱的(因为它试图隐藏需要新类型的事实)。所以你对元组的模仿,这是对一种类型的模仿,确实是非常混乱的:)
1赞
Simply Me
2/21/2016
我知道,但这是一个很好的工作:)。您可以覆盖 2-3 个运算符,它实际上会以正常方式运行。
15赞
iksemyonov
2/21/2016
#2
正如 QTBUG-22441 所示,开发人员无意添加 的 Qt 模拟。(尽管 QTBUG-3283 给了我们希望它能够完成,但它的日期是 12 月 9 日,而带有 WONTFIX 的新报告日期是 5 月 15 日)。因此,您需要回退到或提出自己的数据结构。std::tuple
std::tuple
马克·穆茨(Marc Mutz)的名言:
无论如何,假设的 QTuple 不会做任何不同的事情,除了消耗 Qt 开发人员资源。
此外,Qt 5算法模块的文档明确指出了以下内容:
从历史上看,Qt曾经提供与许多STL算法函数直接等价的函数。从Qt 5.0开始,我们鼓励您直接使用STL中可用的实现;大多数Qt代码已被弃用(尽管它们仍然可用于保持旧代码的编译)。
因此,在使用Qt 5编程时,如果有必要的话,官方鼓励使用STL。
评论
0赞
Bernhard
9/11/2018
引用和链接只提到了 STL 算法,那么容器呢?
1赞
iksemyonov
9/14/2018
@Bernhard 请参阅 doc.qt.io/qt-5/containers.html。Qt容器和STL容器之间有一个关键的区别:Qt实现了隐式共享和写入时复制,而STL则没有(我认为两者都是设计使然)。现在,当涉及到C++11时,对于容器来说意味着移动语义,STL和Qt5容器都实现了这一点。另外,请查看此答案: stackoverflow.com/a/1668549/342384
1赞
Ronan Paixão
3/23/2022
#3
对于一些更简单的情况,您可以使用 或 ,前提是您仅使用 QVariant 支持的数据类型。QVector<QVariant>
QList<QVariant>
文档中一个有趣的注释说:
QVariant 可以扩展为支持 Type 枚举中提到的类型以外的其他类型。有关详细信息,请参阅创建自定义 Qt 类型。
第二个链接包括如何创建 QVariant 可存储的自定义类型。还有自定义类型示例。
评论
std::tuple