我有:
typedef QHash<QString,QString> CueTrack;
QVector<CueTrack> tracks;
每个QHash必须存储12对。
QVector应该包含0到99个元素,但是我不知道它们将提前多少个,因为它取决于将从外部用户文件读取运行时的数据。预计平均约为10。在大多数情况下为5至15;很少会超过20,几乎永远不会超过30(但是,在极少数情况下,它们可以达到99)。
我想到了两种情况:
a)不需要初始调整大小并在需要时调整大小
typedef QHash<QString,QString> CueTrack;
QVector<CueTrack> tracks;
...
tracks.resize(i+1);
tracks[i]["cmd"] = "val";
...
b)初始尺寸
typedef QHash<QString,QString> CueTrack;
QVector<CueTrack> tracks(99);
我有疑问,我想了解:
首选方案是什么,尤其是在性能方面?
还有其他可能更好的方案吗?
此处应使用squeeze()
吗?何时何地?
答案 0 :(得分:0)
空的QHash
不会占用太多空间,而99(对于计算机)是非常小的数据集。
此外,Qt容器具有指数增长策略。如果分配的容器空间太小,它将增加一倍。
因此,如果您调整(+1)的大小,它将以2的幂增加(大约)。
QHash
比QMap
的优势在于它也可以预先分配。
可能您最好的策略是:
tracks.reserve(20);
// When adding a new track:
tracks.resize(i+1);
tracks[i].reserve(12); // number of pairs
但是,以及所有与性能有关的问题:配置文件,然后忽略:-)