繁体   English   中英

Qt框架中的QMap与QList类

[英]QMap vs QList Class in the Qt framework

我试图决定在将来的某些Qt项目中使用QList还是QMap类。 为了确定最适合我的选择,我想确定它们的某些相似之处和不同之处,以便了解在某些情况下最有效的方法。 我对这些异同的理解正确吗?

相似点:

  • 都是容器

  • 两者都包含无序数据

区别:

  • QMap具有键值对,而QList仅具有值

  • QMap使用哈希函数将值放置在适当的索引中,而QList只是追加条目

还有更多相似和不同之处吗?

我可以看一下通用的计算机科学定义,但我读到某处Qt框架可能存在细微差别。

QListQMap的数据组织方式不同。 这导致不同的性能和稍微不同的内存消耗(在大多数情况下,后者通常无关紧要)。 您可以在Qt文档中找到计算复杂性 如果要存储很多元素,则可能会有很大的不同。 考虑选择容器时要多久访问一次数据(搜索vs.插入vs.删除)。

[但是请记住,算法复杂度是仅对大n有效的理论属性。 实际上,由于引用的局部性,通过具有少量元素(<1,000)的数组进行线性搜索通常优于列表/树。 如果您不关心性能,请不要猜测,请务必进行评估。]

两者都包含无序数据

对于QMap实际上并非如此。 QMap被实现为自平衡二进制搜索树 ,它是一种排序的数据结构。

顺便说一句:您通常可以以一种通用的方式来实现您的代码,这使得以后可以轻松切换到另一个容器类型(例如,如果访问模式更改或您的假设被证明是错误的)。 使用auto可以帮助您减轻痛苦。

我认为您对QMap犯了一些错误。

QMap始终保持其内容按键排序。 请参阅此处文档 因此,它并非像您提到的那样无序。

然后, QMap不使用哈希函数。 它通过将元素与operator<()进行比较来存储元素。

实际上,您会混淆QMapQHash QHash确实是任意排序的,并且其元素需要提供用于比较的operator==()qHash(key)函数。

我认为它可以帮助您更好地了解需要使用的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM