(一)介绍
QMap
QMap中的key-value对是升序排列的
插入和删除操作中都可以使用[]运算符,其下标为key;为避免创建不必要的空值,推荐用vlaue()而不是[]从QMap中取值。QMap的特性是单值;QMultiMap<K,T>则支持同一关键字下多值的存在,插入操作由insertMulti()完成
QHash通常是单值的,而QMultiHash则通过insertMulti()支持多值插入。
(二)对比
QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap
QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash
两种之间的区别是:
QHash查找速度上显著于QMap
QHash以任意的方式进行存储,而QMap则是以key顺序进行存储.
Qhash 的键类型必须提供operator==()和yige 全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数.
(三)例子
QMap
QHash:
#include <QCoreApplication>
#include<QHash>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QHash<QString, QString> hash;
hash.insert("beijing", "010");
hash.insert("wuhan", "027");
hash.insert("tianjin", "022");
QHash<QString, QString>::const_iterator i;
for(i=hash.constBegin();i!=hash.constEnd();i++)
{
qDebug()<<i.key()<<" "<<i.value()<<endl;
}
QHash<QString, QString>::iterator j;
j = hash.find("wuhan");
if(j != hash.end())
{
j.value() = "002700";
}
QHash<QString, QString>::const_iterator k;
for(k=hash.constBegin();k!=hash.constEnd();k++)
{
qDebug()<<k.key()<<" "<<k.value()<<endl;
}
return a.exec();
}