QT容器类(三) 之 QMap、QHash
QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMapQHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash
·
(一)介绍
QMap
QMap中的key-value对是升序排列的
插入和删除操作中都可以使用[]运算符,其下标为key;为避免创建不必要的空值,推荐用vlaue()而不是[]从QMap中取值。QMap<K,T>中的K和T除了要求具备默认构造函数、拷贝构造函数和赋值运算符外,K还必须支持operator <,因为这样才能实现前面提到的升序排列。
keys() & values()
QMap的特性是单值;QMultiMap<K,T>则支持同一关键字下多值的存在,插入操作由insertMulti()完成
QHash提供的接口和QMap很相似
QHash<K,T>中的K要符合的额外要求:支持operator ==,并且K可用全局函数qHash()来计算hash value
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
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QMap<QString, QString> map;
- map.insert("beijing", "111");
- map.insert("shanghai", "021");
- map.insert("tianjin", "022");
- map.insert("chongqing", "023");
- map.insert("jinan", "0531");
- map.insert("wuhan", "027");
- QMap<QString, QString>::const_iterator i;
- for( i=map.constBegin(); i!=map.constEnd(); ++i)
- qDebug() << i.key() <<" " << i.value();
- QMap<QString, QString>::iterator mi;
- mi = map.find("beijing");
- if(mi != map.end())
- mi.value() = "010";
- QMap<QString, QString>::const_iterator modi;
- qDebug() << "";
- for( modi=map.constBegin(); modi!=map.constEnd(); ++modi)
- qDebug() << modi.key() <<" " << modi.value();
- return 0;
- }
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();
}
更多推荐
已为社区贡献4条内容
所有评论(0)