#include <QCoreApplication>
#include<map>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//QMap 类
/*QMap<Key,T>提供一个从类型为Key的键 到类型为 T的值的映射。童话曾QMap储存的书数据形式时一个键对应一个值,
* 并且按照Key的次序(ASCII码)存储数据。
* 为了能够支持一键多值的情况,QMap提供QMap<Key,T>::inserMulti()和QMap<Key,T>::values()函数。
* QMultiMap类来实例化一个QMap对象
*/
//1. 创建QMap实力,第一个参数为QString类型的键,第一个参数为int类型的值
QMap<QString,int> qmap;
//插入数据信息的两种方式
qmap["g报警"]= 110;
qmap["b火警"]= 119;
qmap["a求救"]= 911;
qmap.insert("e大哥",1); //插入 QMap 在里面会根据key的Ascii码依次排序
qmap.insert("d二弟",2);
qmap.insert("c三弟",3);
qmap.insert("f四弟",4);
qDebug()<<qmap;
//删除数据信息key键
qmap.remove("c三弟");
qDebug()<<qmap;
//1.迭代器(java)
QMapIterator<QString,int> itro(qmap);
while(itro.hasNext()) //hasNext() 如果当前引用的下一个对象不为null时返回true
{
itro.next(); //引用指向下一个对象
qDebug()<<itro.key()<<":"<<itro.value(); //输出当前对象
}
//2.STL类型的迭代
qDebug()<<"**********************";
QMap<QString,int>::const_iterator citr = qmap.constBegin(); //把容器里的第一个引用传进去
while (citr!= qmap.constEnd()) {
qDebug()<<citr.key()<<":"<<citr.value();
citr++;
}
//用key键 来查找对应的 T值
qDebug()<<endl;
qDebug()<<"key-->T"<<qmap.value("f四弟");
//用T键 来查找对应的 key值
qDebug()<<"key-->T"<<qmap.key(911);
//修改键值
//一个键对应一个值,再次调用insert()函数将覆盖之前的值
qDebug()<<endl;
qmap.insert("f四弟",789456211);
qDebug()<<qmap;
//查询是否包含某个键
qDebug()<<endl;
qDebug()<<"result="<<qmap.contains("a求救");
qDebug()<<"result="<<qmap.contains("c三弟");
//输出所有的QMap实例化:key键和T值
qDebug()<<endl;
QList<QString> lkey = qmap.keys();
qDebug()<<lkey;
QList<int> lint = qmap.values();
qDebug()<<lint;
//一个键对应多个值
//直接使用QMultiMap类来实例化一个QMap对象
qDebug()<<endl;
QMultiMap<QString,QString> mulmap;
mulmap.insert("学生","id");
mulmap.insert("学生","name");
mulmap.insert("学生","sex");
mulmap.insert("学生","score");
mulmap.insert("学生","age");
qDebug()<<mulmap;
qDebug()<<endl;
qDebug()<<endl;
//QHash类
/*QHash<Key,T>具有与QMap几乎完全想用的API。QHash维护着一张哈希表(Hash Table),
* 哈希表的大小与QHash的数据项的数目相适应。
* QHash以任意的顺序组织它的数据。当存储数据的顺序无关紧要时,建议使用QHash作为存放数据的容器
*/
QHash<QString,int> qh; //存储时会分配好位置 是无序的 接下来遍历位置不变
qh["a大哥"]=1;
qh["b二哥"]=2;
qh["c三弟"]=3;
qh["d四弟"]=4;
qh.insert("f五弟",5);
QList<QString> list = qh.keys();
for(int i = 0;i < list.length();i++){
qDebug()<<list[i]<<":"<<qh.value(list[i]);
}
qDebug()<<endl;
//QHash内部的迭代其QHashIterator类
QHash<QString,int>::const_iterator itor = qh.constBegin();
for(;itor !=qh.constEnd();itor++){
qDebug()<<itor.key()<<":"<<itor.value();
}
/*
QMap 与QHash区别:
QHap 与 QHash的功能差不多,但QHash的查找速度更快;
QMap是按照键的顺序存储数据,而QHash是任意顺序存储的;
QMap的键必须提供"<"运算符,而QHash的键必须提供"=="运算符和一个名为qHash()的全局散列函数
*/
return a.exec();
}