c++ 插入QSet与QHash

7hiiyaii  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(246)

我想知道如何插入到QSet的确切工作原理。QSet是否在插入时将所有项目与新项目进行比较?因为如果是这样,我会使用带有简单ID的QHash作为键,而不是使用带有容器类的QSet,后者具有更复杂的=运算符。这样,QHash在插入时比较会更快。我不确定我的想法是否正确。

mySet.insert(proxy); //1. QSet Insertion 
myHash.insert(id, proxy); //2. QHash Insertion

哪一个会更快?

nlejzf6q

nlejzf6q1#

Qt容器的算法复杂度在这里有文档记录。QSetQHash对于所有操作具有相同的复杂度。时间复杂度为O(n),时间复杂度为O(n)。
事实上,至少在Qt 6中,相似之处不止于此;在QSet的帮助页中记录:

  • QSet<T>是Qt的通用容器类之一。它以未指定的顺序存储值,并提供非常快速的值查找。在内部,QSet<T>被实现为QHash

我相当肯定O复杂度在Qt的未来版本中将保持不变,但QSet在内部是QHash的事实可能并不总是正确的(我没有在Qt 5中检查)/可能在未来不会保持正确。
然后,差异实际上只是关于两个类的模板参数。

相关问题