1. QMap
cpp
// 1:QMap的使用
// 创建一个QMap 实例 key 为 QString value 为 int
QMap<QString,int> Grade;
// 插入方式有两种插入方式
// 1.map[key] = value
Grade["语文"] = 90;
Grade["数学"] = 120;
// 2.map.insert(key,value);
Grade.insert("英语",89);
// 删除key
Grade.remove("语文");
qDebug() << Grade ;
// 普通打印
qDebug() << Grade ;
// 循环打印Map
// 1.通过迭代器实现 (java类型实现)
QMapIterator<QString,int> itr(Grade);
// while循环输出
while (itr.hasNext())
{
itr.next();
qDebug() << itr.key() << itr.value();
}
qDebug() << endl;
// 2.STL类型迭代器
QMap<QString,int>::const_iterator stl_itr = Grade.constBegin();
while(stl_itr != Grade.constEnd())
{
qDebug() << stl_itr.key() << stl_itr.value();
stl_itr++;
}
// 在QMap中查找
// 根据KEY 查找对应的值
//1.
qDebug() << Grade["数学"] <<endl;
//2.
qDebug() << Grade.value("数学") <<endl;
// 根据值来查找Key
qDebug() << Grade.key(120);
// 修改键值
// 一个键对应一个值,调用insert 将覆盖原有的键
Grade.insert("英语",118);
qDebug() << Grade.value("英语") <<endl;
// 判断键是否存在?
qDebug() << Grade.contains("数学") <<endl;
// 输出Qmap对象的键和值
QList<QString> Keys = Grade.keys();
QList<int> Values = Grade.values();
qDebug() << "key: " << Keys;
qDebug() << "value: " << Values;
// 一个键对应多个值 QMultiMap 类
QMultiMap<QString,QString> MultiMap;
MultiMap.insert("stu","id");
MultiMap.insert("stu","name");
MultiMap.insert("stu","grade");
MultiMap.insert("stu","sex");
MultiMap.insert("stu","age");
qDebug() << MultiMap;
2. QHash
QHash<Key,T>具有与 QMap ,几乎完全相同的 API.QHash 维护着一张哈希表(Hash Table),哈希表的大小与 QHash 的数据项的数目相适应。QHash 以任意的顺序组织它的数据。当存储数据的顺序无关紧要时,建议使用 QHash 作为存放数据的容器。
QMap 与 QHash 区别:QHash 与 QMap,的功能差不多,但 QHash 的查找速度更快;QMap,是按照键的顺序存储数据,而 QHash ,是任意顺序存储的QMap,的键必须提供"<"运算符,而 QHash的键必须提供"=="运算符和个名为 gHash0的全局散列函数,
cpp
// QHash类
QHash<QString,int> Hash;
Hash["key 1"] = 3;
Hash["key 1"] = 8;
Hash["key 4"] = 9;
Hash["key 2"] = 1;
// 插入hash数据
Hash.insert("key 3",30);
// 获取键列表
QList<QString> key_list = Hash.keys();
// 循环打印
for (int var = 0; var < key_list.length(); var++) {
qDebug() << key_list[var] << "," << Hash[key_list[var]] <<endl;
}
// QHash内部的迭代器 QHashIterator 用法与 QMapIterator 一样
QHash<QString,int> hash;
hash["key 1"] = 3;
hash["key 1"] = 8;
hash["key 4"] = 9;
hash["key 2"] = 1;
QHash<QString,int>::const_iterator itr;
for (itr=hash.begin(); itr!=hash.end(); itr++)
{
qDebug() << itr.key() << ":" << itr.value() << endl;
}
3. QVector
QVector在相邻的内存当中存储给定数据类型T的一组数值。在一个QVector,的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由 QVector 存储数据的方式决定的。
cpp
// QVector类
// QVector<T> 是QT的一个容器类
QVector<int> qvr;
// QVector存储的第一种方式
qvr << 10;
qvr << 20;
qvr << 30;
// 第二种
qvr.append(50);
qvr.append(60);
qvr.append(70);
qDebug() << qvr << endl;
// 查看QVector中的元素的个数
qDebug() << qvr.count() << endl;
// 删除Qvector中的元素
qvr.remove(0);
// 循环打印
for (int i = 0; i < qvr.count(); i++) {
qDebug() << qvr[i] << endl;
}
qDebug() << endl;
// 从第二个元素开始 删除后面三个元素
qvr.remove(2,3);
// 循环打印
for (int i = 0; i < qvr.count(); i++) {
qDebug() << qvr[i] << endl;
}
// 判断是否包含元素 QVector::contains() -> bool
qDebug() << qvr.contains(40) << endl;