如何创建具有修复索引的QList

How to create a QList with fix indices

本文关键字:索引 QList 何创建 创建      更新时间:2023-10-16

我想要一个QList,其中元素在删除时仍在其位置。所以它就像一个有洞的列表或诸如此类的东西。

使用QMap<int, your_type>

有不同的选项,具有不同的语义:

  1. QMap<int, T>:"洞"根本不存在。访问孔会导致默认值/不存在
  2. QVector<T>:孔作为空值或默认构造值存在。这需要来自T的null语义。这适用于许多Qt类型,如QStringQDateTime,它们都有空值的概念(=>isNull()
  3. QVector<T*>:孔是nullptr s。如果你有一个纯粹的"指针类型",例如QObject派生的T,这会非常有效
  4. QHash<int, T>:基本上与选项1相同),但要注意:QHash按哈希顺序遍历项目,这是完全随机的,而QMap按&lt-密钥类型上的关系(int

如果您想要一个list with holes,为什么不考虑对象指针的QVectorQVector<MyCustomType*> myListWithHoles;)?。。。假设hole是指内存被释放的对象,则指针的QVector会保留每个项目的位置,即使您销毁了其中的一些,并且您仍然可以访问每个项目的内存。