我想知道如何插入到QSet的确切工作原理。QSet是否在插入时将所有项目与新项目进行比较?因为如果是这样,我会使用带有简单ID的QHash作为键,而不是使用带有容器类的QSet,后者具有更复杂的=运算符。这样,QHash在插入时比较会更快。我不确定我的想法是否正确。
mySet.insert(proxy); //1. QSet Insertion myHash.insert(id, proxy); //2. QHash Insertion
哪一个会更快?
nlejzf6q1#
Qt容器的算法复杂度在这里有文档记录。QSet和QHash对于所有操作具有相同的复杂度。时间复杂度为O(n),时间复杂度为O(n)。事实上,至少在Qt 6中,相似之处不止于此;在QSet的帮助页中记录:
QSet
QHash
QSet<T>
我相当肯定O复杂度在Qt的未来版本中将保持不变,但QSet在内部是QHash的事实可能并不总是正确的(我没有在Qt 5中检查)/可能在未来不会保持正确。然后,差异实际上只是关于两个类的模板参数。
1条答案
按热度按时间nlejzf6q1#
Qt容器的算法复杂度在这里有文档记录。
QSet
和QHash
对于所有操作具有相同的复杂度。时间复杂度为O(n),时间复杂度为O(n)。事实上,至少在Qt 6中,相似之处不止于此;在
QSet
的帮助页中记录:QSet<T>
是Qt的通用容器类之一。它以未指定的顺序存储值,并提供非常快速的值查找。在内部,QSet<T>
被实现为QHash
。我相当肯定O复杂度在Qt的未来版本中将保持不变,但
QSet
在内部是QHash
的事实可能并不总是正确的(我没有在Qt 5中检查)/可能在未来不会保持正确。然后,差异实际上只是关于两个类的模板参数。