我需要能夠爲給定圖形中的每個頂點存儲圖形類型樹。我正在嘗試使用boost::ptr_map<vertex_desc, Tree> DESC
,其中Tree
是一個鄰接列表圖類型。在我創建樹對象desc
並添加我想要的頂點之後,我嘗試將desc存儲到像DESC.insert(std::make_pair(*vi.first, desc))
那樣的映射中,但編譯器不允許它。如果我 做DESC[*vi.first] = desc
編譯器不會抱怨,但在此之後,我嘗試使用地圖時遇到非常奇怪的行爲。我應該使用另一種方式來存儲Tree對象嗎?BGL:將對象映射到圖形
-1
A
回答
1
您必須小心使用vertex_descriptor
以外的對象。從docs page中查看不同容器選擇的迭代器/描述符穩定性/失效表。如果您希望頂點描述符始終有效(除非被刪除),則需要使用boost::listS
作爲VertexList
參數。這就是說,如果你想要任何關聯到圖頂點,你應該真的把它放到頂點屬性中,特別是對於捆綁屬性。但是如果你不能修改它,那麼你應該照我說的去做,也就是說,確保描述符在圖操作中保持有效。
+0
我終於改變了我的實現,因爲使用boost :: pt_map搞砸了一切,關於你在地圖中存儲什麼類型或數據結構的規則非常嚴格,我必須非常小心地恢復樹並編輯例如,當我試圖恢復一棵樹時,每隔一個指向指向我編輯的樹的同一範圍內的樹的其他指針,所以現在我不使用這些指針,而是使用捆綁屬性將每棵樹存儲在頂點中(如您所建議的那樣)。這是一種非一般的方法,但至少我能夠對算法進行處理並測試它的執行時間。謝謝你的迴應 – LetsPlayYahtzee 2014-10-01 16:45:19
相關問題
- 1. 將JSON映射到對象
- 2. 將JSON對象映射到Javascript對象
- 3. Java將對象映射到對象 - Moo
- 4. 將形狀編號映射到圖例
- 5. SceneKit/ARKit:將屏幕形狀映射到3D對象
- 6. 將自定義映射綁定到對象的形式 - 如何?
- 7. 將db varchar映射到域對象bool
- 8. 無法將紋理映射到對象
- 9. 將XML映射到Java對象庫
- 10. ES6將對象映射到裝飾器
- 11. Java將對象模型映射到類
- 12. 將SQL數據映射到對象
- 13. 如何將XML映射到C#對象
- 14. 將XML實體映射到Java對象
- 15. 將Java對象映射到Prolog表示
- 16. 將對象實例映射到'this'?
- 17. 將JSON對象映射到POCO
- 18. 將JSON映射到類對象
- 19. 將ActionScript對象映射到類?
- 20. 如何將JSON映射到C#對象
- 21. 將存儲數據映射到對象
- 22. 無法將響應映射到對象
- 23. 將JSON映射到php對象
- 24. 將XML映射到無關對象
- 25. 將Java對象映射到@XmlElement值
- 26. Mongoose - 將json對象映射到Schema
- 27. JAXB映射將複雜對象映射到JSON
- 28. 原始Java Map的對象散列映射(將POJO映射到映射中)
- 29. 映射到json對象
- 30. 映射到JSON Java對象
從我發現我明白'DESC [* vi.first] = desc'是一個非常錯誤的方式存儲對象到'std :: map'(因爲'boost :: ptr_map'是一個包裝的'使用指針的std :: map')。您必須使用'new'運算符或類似'boost :: ptr_map_insert'函數來處理插入。但是我仍然發現使用ptr_map指向'boost :: adjacency_list'圖形是一項非常困難的任務。 – LetsPlayYahtzee 2014-10-01 16:53:15