
#include <QCoreApplication>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//QMap类
//1:创建QMap实例, 第一个参数为QSstring类型的key, 第二个参数为int类型的value
//按key的顺序排序
QMap<QString, int> qmap;
//插入数据的两种方式
qmap["Chinese"] = 115;
qmap["English"] = 120;
qmap.insert("Math",115);
qmap.insert("Phtsics",99);
qmap.insert("Chemistry", 100);
//删除数据信息key键
qmap.remove("Chemistry");
//遍历QMap类的实例 数据信息
//1:迭代器(java类型的迭代操作)
QMapIterator<QString,int> itr(qmap);
while (itr.hasNext() ){
itr.next();
qDebug()<< itr.key() << " : " << itr.value();
}
qDebug() << "--------------------------------------------";
//2:STL类型的迭代操作
QMap<QString, int>::const_iterator stritr = qmap.constBegin();
while (stritr != qmap.constEnd()) {
qDebug()<< stritr.key() <<" : " << stritr.value();
stritr++;
}
qDebug() << "--------------------------------------------";
//查找
//key键/T键 --》来查找
qDebug()<<"根据key值来查找对应的Value Math: "<< qmap.value("Math");
qDebug()<<"根据value来查找对应的key 115" <<qmap.key(115); //返回第一个匹配的key
qDebug() << "--------------------------------------------";
//修改值
//一般key是唯一的 再次调用insert()将覆盖之前的值 插入值的方式即可用来修改值
qmap.insert("Math", 118);
qmap["Math"] = 120;
qDebug()<<"Math: " <<qmap.value("Math");
qDebug()<<"Math: "<< qmap["Math"];
qDebug() << "--------------------------------------------";
//查询
//查询是否包含某个key
qDebug()<<"是否包含某个key Chinese:" <<qmap.contains("Chinese");
qDebug() << "是否包含某个key Chemistry: " <<qmap.contains("Chemistry");
qDebug() << "--------------------------------------------";
//输出所有QMap实例化:key值和value(T)值
qDebug() << endl;
QList<QString> akeys = qmap.keys();
qDebug()<<akeys;
QList<int> avalues = qmap.values();
qDebug()<<avalues;
for(int i =0 ; i < akeys.size(); i++)
{
QString key = akeys.at(i);
qDebug()<<key << " : " << qmap.value(key);
}
qDebug() << "--------------------------------------------";
qDebug()<<qmap <<endl;
qDebug() << "--------------------------------------------";
//当一个键对应多个值的时候 使用QMultiMap来实例化一个QMap对象
QMultiMap<QString, QString> multimap;
//multimap["student"] = "no"; //此时这种插值方法是不可以的
multimap.insert("student", "name");
multimap.insert("student", "sex");
multimap.insert("student", "age");
multimap.insert("student","height");
qDebug()<<multimap;
//QHash类 无序的map字典
//QHash<key>具有与QMap几乎完全相同的API,QHash维护的是一张hash表,哈希表的大小与QHash的数据项的数目相适应
//QHash以任意的顺序组织它的数据,当存储的数据的顺序无关紧要时,建议使用QHash作为存放数据的容器
qDebug() << "---------------------QHASH-----------------------";
QHash<QString, int> qhash;
qhash["key 1"] = 3;
qhash["key 2"] = 8;
qhash["key 3"] = 4;
qhash["key 4"] = 2;
qhash.insert("key 3",90);
QList<QString> list = qhash.keys();
for(int i = 0 ; i < list.size(); i++)
qDebug()<<list[i]<<" , " << qhash.value(list[i]);
qDebug() << "---------------------QHASH-----------------------";
//QHash内部的迭代器类QHashIterator类
QHash<QString, int>::const_iterator iterator;
for(iterator = qhash.begin();iterator != qhash.end();iterator++)
qDebug()<<iterator.key()<<" : "<<iterator.value();
//-------- QMap与QHash的区别 -----------//
//1.QHash与QMap功能差不多,但是QHash的查找速度更快
//2.QMap是有序的,按key的顺序存储数据;QHash是无序的
//3.QMap的键必须提供"<"运算符, 而QHash的键必须提供“==”运算符和一个名为qHash()的全局散列函数
qDebug() << "---------------------QVector-----------------------";
//容器类QVector<T> 在相邻的内存中存储给定数据类型T的一组数值,在一个QVector的前部或则中间位置位置插值速度
//很慢,会导致后续的大量数据被移动,因为是连续存储的(有点像变长数组)
//QVector<T>类 是Qt的一个容器类
QVector<int> qvr;
qvr << 10;
qvr<< 20;
qvr.append(30);
qvr.append(40);
qvr.append(50);
qvr.append(60);
qvr.append(70);
qvr.append(80);
qDebug()<<qvr<<endl;
//求出QVector实例化的容器中元素的个数
qDebug()<<QString("qvr has %1 items").arg(qvr.count());
//删除元素
qvr.remove(0); //删除idex == 0 的元素
qvr.remove(2,3); //从index ==2 开始,删除后续三个元素
//遍历所有元素
for(int i = 0; i <qvr.count(); i++)
qDebug()<<"qvr[i] is "<< qvr[i];
//包含某个元素
qDebug()<< qvr.contains(10); //false 已经移除
qDebug()<< qvr.contains(70); //true 包含
return a.exec();
}
所有案例的运行结果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。