2013-05-13 51 views
0


我正在開發一個在3D空間中映射信息的軟件。我使用容器來保存這些信息。我使用的容器是Qt容器的大小:QMap比Qlist大得多嗎?

QList< QList< QMap<float, QList<quint16> > > > lidardata; 

基本上是表示一個矩形區域,其中每個小區爲1米×1米的2D網格,每個單元中的QMAP包含代表高度和一個列表的密鑰值的四個相關值在這個高度。這樣我可以存儲五個值(高度+其他值)。我插入值,在這樣的循環(rown科隆的行和列的索引分別)

QList<quint16> NEWLIST; 

NEWLIST << (width*100.0) << (1000.0+sens*100.0) << (quint16)(intensity*1000.0) ; 

lidardata[ rown ][ coln ].insert(heightValue, NEWLIST); 

這種方法,而不是使用QMap<float, QList<quint16>我用QList<quint16>,只是附加了5個值之前。
現在的問題是:運行我的程序耗盡內存很快。它使用第一種解決方案(QList而不是QMap)完成了大約800Mb的內存,現在它耗盡了(大約1.4Gb),佔總數據存儲過程的75%。
有人可以確認,使用QMap<float, QList<quint16>而不是QList<quint16>存儲相同數量的信息是否需要更多的內存空間?

有沒有人有任何提示來限制空間?如果沒有出現,我會回到舊的解決方案。

+1

你有什麼理由爲什麼你第一次使用這麼多的列表和地圖?如果你想用數據表示一個單元格,爲什麼不創建一個包含xpos/ypos成員變量的單元類,並將一個對象的變量放到高度圖數據中?然後只使用一個單元格項目列表。這將比列表中的列表快得多,並佔用更少的內存。 – TheDarkKnight 2013-05-14 08:51:56

+0

這很有幫助,嵌套的QLists真的沒有必要。我保留了我的映射,並使用一個類來保存一維QMaps數組,這只是我的二維空間的連續表示,其中2D中的位置由[rowNumber * rowTotNumber + colNumber]引用。儘管如此,我的數據非常龐大,唯一的解決方案是查找基於磁盤的容器。謝謝! – Francesco 2013-05-15 07:40:25

+0

不客氣; O) – TheDarkKnight 2013-05-15 07:59:13

回答

1

正如評論mentionned:

你的代碼可以從Primitive Obsession.

嘗試遭受解決使用的ValueObject在本教程弄不好指出你的問題:建立與所有需要attibutes一類,和實例工作這個類而不是維護嵌套的Qlist s和QMap s。