Является ли порядок итераций для Qhash Qt повторяемым при нескольких идентичных запусках программы? - PullRequest
1 голос
/ 22 июля 2010

Предположим, что программа запускается несколько раз одинаковым образом.При каждом запуске один и тот же набор объектов вставляется в QHash в том же порядке вставки;затем объекты в QHash повторяются.Вопрос в том, будут ли объекты повторяться в одном и том же порядке при каждом запуске программы?

Ответы [ 3 ]

3 голосов
/ 22 июля 2010

Возможно, но вы не можете полностью на это полагаться.

QHash подобно QSet требует, чтобы любой тип, используемый в качестве ключа, обеспечивал перегрузку функции qHash, которая преобразует объект вхеш-код.Внутри хеша элементы упорядочены по хеш-коду.Обычно это преобразование в хеш-код будет стабильным и детерминированным, и поэтому объекты получат одинаковые хеш-коды и, следовательно, будут в том же порядке, даже между запусками.

Однако ничто не может остановитьот создания типа, в котором вывод qHash зависит от некоторого значения (например, адреса указателя, содержащегося в объекте), которое было бы постоянным для определенного прогона, но не согласованным между прогонами.

0 голосов
/ 20 июля 2012

Цитируя документацию :

QHash неупорядочен, поэтому последовательность итератора нельзя считать предсказуемой.Если требуется заказ по ключу, используйте QMap.

0 голосов
/ 22 июля 2010

Если используемые перегрузки qHash гарантированно возвращают одинаковые значения qHash при выполнении программы, то гарантированно ли порядок итераций QHash будет одинаковым при выполнении? Есть ли что-нибудь еще о том, как реализован QHash (помимо зависимости от возвращаемых значений qHash), что может привести к тому, что порядок итераций QHash будет различаться в зависимости от выполнения программы для одного и того же набора объектов (вставленных в том же порядке)?

...