Вставка в QSet против QHash
Я хотел бы знать, как именно работает вставка в QSet. Сравнивает ли QSet все элементы с новым элементом при вставке? Потому что, если это так, я бы использовал QHash с простым идентификатором в качестве ключа вместо использования QSet с классом контейнера, который имеет более сложный оператор =. Таким образом, QHash будет быстрее сравнивать при вставке. Я не уверен, правильно ли я думаю.
mySet.insert(proxy); //1. QSet Insertion
myHash.insert(id, proxy); //2. QHash Insertion
Какой из них будет быстрее?
1 ответ
Алгоритмическая сложность контейнеров Qt документирована здесь . и иметь одинаковую сложность для всех операций. (Аморт. O(1), в худшем случае O(n)).
На самом деле, по крайней мере в Qt6, сходство выходит за рамки этого; описано на странице справки для:
один из универсальных классов-контейнеров Qt. Он хранит значения в неопределенном порядке и обеспечивает очень быстрый поиск значений. Внутренне,
QSet<T>
реализован как .
Я вполне уверен, что сложность O останется прежней в будущих версиях Qt, но тот факт, чтоQSet
внутренне являетсяQHash
возможно, не всегда было правдой (я не проверял в Qt5)/может не оставаться верной в будущем.
Тогда разница на самом деле заключается только в параметрах шаблона для двух классов.