Вставка в 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)/может не оставаться верной в будущем.

Тогда разница на самом деле заключается только в параметрах шаблона для двух классов.

Другие вопросы по тегам