一.QT容器分类
Qt提供了多种容器类,大致可以分为以下几类:
1.顺序容器:这类容器按照线性顺序(如列表或数组)存储元素。例如,QList, QLinkedList, QVector, QStack, 和 QQueue。
2.关联容器:这类容器允许你存储自定义的键值对。例如,QMap 和 QHash。
3.容器迭代器:用于遍历容器中的元素。Qt提供了Java类型的迭代器和STL类型的迭代器。
4.其他容器:还有一些其他类型的容器,如QSet,用于存储唯一元素的集合。
二.容器介绍
1.顺序容器和关联容器在前面文章已有详细介绍,不在赘述。
2.容器迭代器:
(1)Java风格的迭代器:
QSetIterator: 这是一个只读迭代器,用于遍历QSet中的元素。
QSet
// 假设set已经被填充了一些数据...
QSetIterator
while (it.hasNext()) {
int value = it.next();
qDebug()< } (2)STL风格的迭代器 QSet::const_iterator: 这是一个const迭代器,用于只读遍历集合中的元素。 const QSet // 假设set已经被填充了一些数据... for (QSet int value = *it; qDebug()< } 三.QSet介绍 QSet QSet的API大部分和QList相同。这里仅列举QSet独有的成员函数。 1、QSet QSet 从当前集合中删除other集合中未包含的所有项目。返回当前集合的引用。 QSet QSet set1.intersect(set2); qDebug()< 2、bool intersects(const QSet 如果此集合至少有一项与 other 的项相同,则返回 true。(是否相交) 3、QSet 从当前集合中删除包含在other集合中的所有项目。返回当前集合的引用。 QSet QSet set1.subtract(set2); qDebug()< 4、QSet other 集合合并到当前集合。 返回当前集合的引用。 QSet QSet set1.unite(set2); qDebug()< 5、QSet 返回新的集合。取交集。 QSet QSet qDebug()<<(set1 & set2);//QSet(4, 5) 6、QSet QSet set1 &= 4; qDebug()< 7、QSet 返回一个新的 QSet,它是当前集合和 other 集合的集合差。 QSet QSet qDebug()<<(set1 - set2);// QSet(1, 2, 3) 8、QSet 等同于 subtract(other)。 9、QSet 减去集合中的一项 QSet qDebug()<<(set1 -= 3);// QSet(5, 2, 1, 4) 10. // 输出成QList QList qDebug()<< "输出成QList :" << listStrs; 11.常规操作 QSet set.insert("212"); // 重置大小 set.reserve(10); // 输出容量 qDebug()<< "容量 :" << set.capacity(); // 输出内容 qDebug()<< "输出内容 :" << set; // 是否包含 set.contains("121") //true 包含 // 输出实际大小 qDebug()<< "实际大小:" << set.size(); // 输出内容 qDebug() << "输出内容 :" << set; // 是否是空 qDebug()<< "是否为空 :" << set.isEmpty(); // 移除某值 set.remove("121"); // 输出所有元素 qDebug()<< "输出元素 :" << set.values(); // 清除 set.clear(); 四.使用场景 1.消除重复项: 如果有一个包含重复项的列表或数组,并且想要消除重复项,可以使用QSet。QSet会自动删除重复的元素,只保留唯一的元素。 2.快速查找: QSet提供了高效的插入、查找和删除操作。如果需要频繁地查找元素是否存在于一个集合中,QSet是一个很好的选择。它的查找操作的时间复杂度接近于O(1),因此非常快速。 3.集合运算:QSet支持常见的集合运算,如并集、交集和差集。可以使用QSet来执行这些操作,对两个集合进行合并、比较或找出它们的共同元素。 4.存储唯一标识符: 在某些情况下,可能需要存储一组唯一标识符,例如数据库中的唯一ID或网络中的唯一连接。QSet可以方便地存储这些标识符,并确保每个标识符只出现一次。 5.跟踪状态: 如果需要跟踪一组对象的状态,并确保每个状态只出现一次,可以使用QSet。例如,在一个游戏中,可能需要跟踪玩家已经访问过的关卡,以确保他们不会重复访问。