【发布时间】:2013-05-13 18:09:14
【问题描述】:
我正在开发一个在 3D 空间中映射信息的软件。我使用一个容器来保存这些信息。我使用的容器是
QList< QList< QMap<float, QList<quint16> > > > lidardata;
基本上是一个二维网格,表示一个矩形区域,其中每个单元格为 1 米 x 1 米,并且在每个单元格中,QMap 包含一个表示高度的键值和四个相关值的列表那个高度。这样我可以存储五个值(高度+其他值)。我在这样的循环中插入值(rown 和 coln 分别是行和列索引)
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 的内存,现在它在整个数据存储过程的 75% 处耗尽(大约 1.4 Gb)。
有人可以确认使用QMap<float, QList<quint16> 而不是QList<quint16> 存储相同数量的信息确实需要更多的内存空间吗?
有没有人有任何限制空间的提示?如果没有任何问题,我会回到旧的解决方案。
【问题讨论】:
-
你有什么理由首先使用这么多列表和地图吗?如果你想用数据表示一个单元格,为什么不创建一个带有 xpos / ypos 成员变量的单元格类,并有一个高度图数据的对象变量呢?然后只需使用一个单元格项目列表。这将比列表中的列表快得多,并且占用更少的内存。
-
这很有帮助,嵌套的 QLists 真的没有必要。我保留了我的地图并使用了一个类来保存一维 QMaps 数组,这只是我的二维空间的连续表示,其中二维中的位置由 [rowNumber * rowTotNumber + colNumber] 引用。我的数据仍然很大,唯一的解决方案是找到基于磁盘的容器。谢谢!
标签: qt size containers qmap