我正在開發一個在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>
存儲相同數量的信息是否需要更多的內存空間?
有沒有人有任何提示來限制空間?如果沒有出現,我會回到舊的解決方案。
你有什麼理由爲什麼你第一次使用這麼多的列表和地圖?如果你想用數據表示一個單元格,爲什麼不創建一個包含xpos/ypos成員變量的單元類,並將一個對象的變量放到高度圖數據中?然後只使用一個單元格項目列表。這將比列表中的列表快得多,並佔用更少的內存。 – TheDarkKnight 2013-05-14 08:51:56
這很有幫助,嵌套的QLists真的沒有必要。我保留了我的映射,並使用一個類來保存一維QMaps數組,這只是我的二維空間的連續表示,其中2D中的位置由[rowNumber * rowTotNumber + colNumber]引用。儘管如此,我的數據非常龐大,唯一的解決方案是查找基於磁盤的容器。謝謝! – Francesco 2013-05-15 07:40:25
不客氣; O) – TheDarkKnight 2013-05-15 07:59:13