假设程序以相同的方式运行多次。在每次运行中,相同的一组对象以相同的插入顺序插入到QHash中;那么QHash中的对象将被迭代。问题是这些对象是否会在程序的每次运行中以相同的顺序迭代?Qt的QHash迭代顺序是否可以在程序的多个相同运行之间重复?
1
A
回答
3
也许,但你不能绝对依靠它。
QHash
与QSet
类似,要求用作键的任何类型都提供了将对象转换为散列码的qHash
函数的重载。在散列内部,项目按散列码排序。通常,这种转换为散列码的转换将是稳定且确定的,因此对象将接收相同的散列码,因此即使在运行之间也会以相同的顺序排列。
但是,没有什么能够阻止某人创建一个类型,输出qHash
依赖于某个值(例如对象中保存的指针地址),该值对于特定的运行将是常量,但在运行之间不一致。
0
如果使用的qHash重载保证在程序运行中返回相同的qHash值,那么QHash迭代顺序是否保证在不同的运行中保持相同?除了依赖qHash返回值,QHash是如何实现的(除了依赖qHash返回值)还有其他什么可能导致QHash迭代次序在完全相同的一组对象(按相同顺序插入)上跨程序运行发生变化?
+0
这应该是作为我的答案评论,而不是答案本身。但是,回应是Qt文档调用'QHash'“无序”,所以没有接口保证即使插入顺序和“qHash”值相同,迭代顺序也是一样的。也就是说,如果你检查源代码,你会发现它将是相同的,并且可能会保持这种方式,因为它实际上需要刻意的努力使它不能以这种方式工作。所以,答案是“实际上是的,理论上没有”。 – 2010-07-22 19:28:57
0
QHash是无序的,所以迭代器的序列不能被认为是可预测的。如果需要按键排序,请使用QMap。
相关问题
- 1. 对多个表按顺序运行相同的SQL代码
- 2. 是否可以在线程上运行主QT程序?
- 3. 通过迭代以相反的顺序
- 4. 在Linux中:如何以相同的顺序在文件中重复多行?
- 5. 是否可以在多个域上运行Facebook应用程序?
- 6. 是否可以预测程序运行需要多长时间?
- 7. onTouch(),onClick()是否在同一个线程中按顺序运行?
- 8. 是否可以在本地运行同时在不同节点版本上运行的多个应用程序?
- 9. 如何以相同的顺序在IntelliJ IDEA中运行多个类?
- 10. 重复序列的迭代
- 11. 是否可以在Flex应用程序中运行Java程序?
- 12. 线程池是否按顺序运行?
- 13. 以相同的顺序
- 14. 以相同的顺序
- 15. YouTupe API V3,多个youtube.playlistItems.list请求不是以相同的顺序
- 16. VBA代码是否可以在MS应用程序之外运行?
- 17. 在xUnit.net中,是否可以按顺序运行测试?
- 18. 表不是以相同的顺序mySQL
- 19. 应用程序的服务是否可以运行在不同的进程中?
- 20. 我可以同时在iPhone上运行多个应用程序
- 21. 以相同顺序拉出重复零件的查询
- 22. 是否可以为多个Android SDK版本发布相同的应用程序?
- 23. Bash:在多个内核上运行相同的程序
- 24. 是否可以“并行”这个程序?
- 25. 是否可以指定unordered_map的顺序?
- 26. 运行不同应用程序的两个Android设备是否可以使用相同的SQLite数据库?
- 27. 是否可以在两个Web应用程序之间共享相同的认证信息?
- 28. 是否可以运行同一个webservice的多个版本?
- 29. 当您多次运行SELECT * FROM多个表连接时,在执行之间以不同列顺序返回数据是否可能?
- 30. NSSet的迭代顺序是什么?
如果更改Qt版本会怎么样?那么你将不得不重新测试你的假设,因为你依赖的是没有记录的行为。 – RedX 2012-07-20 15:45:36