假設程序以相同的方式運行多次。在每次運行中,相同的一組對象以相同的插入順序插入到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. Qt的QHash迭代
- 2. 如何測試Java迭代器是否總是使用相同的順序(可重複排序)?
- 3. 是否可以在線程上運行主QT程序?
- 4. 對多個表按順序運行相同的SQL代碼
- 5. 通過迭代以相反的順序
- 6. 在Linux中:如何以相同的順序在文件中重複多行?
- 7. 是否可以在Android Things上運行多個應用程序?
- 8. 是否可以在多個域上運行Facebook應用程序?
- 9. 是否可以預測程序運行需要多長時間?
- 10. onTouch(),onClick()是否在同一個線程中按順序運行?
- 11. 是否可以在本地運行同時在不同節點版本上運行的多個應用程序?
- 12. 我可以假設Object.keys的響應順序是否相同?
- 13. 是否可以在同一時間運行多個AsyncTask?
- 14. 是否可以按照密鑰存儲順序在perl中進行迭代?
- 15. WebRTC SDP blob是否可以在同級之間重複使用?
- 16. 程序以奇怪的順序運行?
- 17. 如何以相同的順序在IntelliJ IDEA中運行多個類?
- 18. 重複序列的迭代
- 19. 是否可以在Flex應用程序中運行Java程序?
- 20. JUnit - 重新運行通過Eclipse以相同順序測試
- 21. 線程池是否按順序運行?
- 22. 是否可以看到測試運行的順序?
- 23. VBA代碼是否可以在MS應用程序之外運行?
- 24. 以相同的順序
- 25. 以相同的順序
- 26. 在xUnit.net中,是否可以按順序運行測試?
- 27. ruby中的.each迭代器是否保證每次都在相同的元素上給出相同的順序?
- 28. YouTupe API V3,多個youtube.playlistItems.list請求不是以相同的順序
- 29. 表不是以相同的順序mySQL
- 30. 可以在java EE項目中按順序運行多個不同的Servlet?
如果更改Qt版本會怎麼樣?那麼你將不得不重新測試你的假設,因爲你依賴的是沒有記錄的行爲。 – RedX 2012-07-20 15:45:36