QMap类 QHash类
Posted Respect@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QMap类 QHash类相关的知识,希望对你有一定的参考价值。
QMap类、 QHash类
QMap与QHash差别:
①QHash比QMap查找速度更快。
②QHash以任意顺序存储,QMap以Key顺序存储数据。
③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator<()函数。
存储一键多值数据时可使用QMultiMap<Key,T>容器或QMultiHash<Key,T>容器。
Java风格迭代器
容器类 | 只读迭代器 | 读写迭代器 |
---|---|---|
QMap<Key,T>,QMultiMap<Key,T> | QMapIterator<Key,T> | QMutableMapIterator<Key,T> |
QHash<Key,T>,QMultiHash<Key,T> | QHashIterator<Key,T> | QMutableHashIterator<Key,T> |
STL风格迭代器
容器类 | 只读迭代器 | 读写迭代器 |
---|---|---|
QMap<Key,T>,QMultiMap<Key,T> | QMap<Key,T>::const_iterator | QMap<Key,T>::iterator |
QHash<Key,T>,QMultiHash<Key,T> | QHash<Key,T>::const_iterator | QHash<Key,T>::iterator |
#include <QCoreApplication>
#include <QMap>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString,QString> infoMap;
//添加数据
infoMap.insert("王祖蓝","163cm");
infoMap.insert("Anglebaby","168cm");
infoMap["易烊千玺"] = "173cm(成长中)";
infoMap["姚明"] = "226cm";
//通过key找value
qDebug() << "姚明:" << infoMap["姚明"];
qDebug() << "易烊千玺:" << infoMap.value("易烊千玺");
//通过value找key
qDebug() << "168cm的是谁呢?"
<< infoMap.key("168cm")
<< endl;
//Java风格只读迭代器
QMapIterator<QString,QString> it_r(infoMap);
for(it_r.toFront();it_r.hasNext();)
{
it_r.next();
qDebug() << it_r.key() << ":" << it_r.value();
}
//Java风格读写迭代器
QMutableMapIterator<QString,QString> it_rw(infoMap);
if(it_rw.findNext("163cm"))
it_rw.setValue("163.1cm");
qDebug() << endl << "修改数据后遍历:";
for(it_rw.toFront();it_rw.hasNext();)
{
it_rw.next();
qDebug() << it_rw.key() <<":" << it_rw.value();
}
QMap<QString,QString> wMap;
wMap.insert("spring","15℃");
wMap.insert("summer","35℃");
wMap.insert("autumn","23℃");
wMap.insert("winter","-5℃");
//STL风格只读迭代器
QMap<QString,QString>::const_iterator i_r;
i_r = wMap.constBegin();
qDebug() << endl << "初始化季节遍历:";
for( ; i_r != wMap.constEnd(); ++i_r)
qDebug() << i_r.key() << ":" << i_r.value();
//STL风格读写迭代器
QMap<QString,QString>::iterator i_rw;
i_rw = wMap.find("spring");
if(i_rw != wMap.end())
i_rw.value() = "16℃";
qDebug() << endl << "修改春天的数据后遍历:";
i_rw = wMap.begin();
for( ; i_rw != wMap.end(); ++i_rw)
qDebug() << i_rw.key() << ":" << i_rw.value();
QMultiMap<QString,QString> wMap1;
wMap1.insert("spring","15℃");
wMap1.insert("summer","35℃");
wMap1.insert("summer","39℃");
wMap1.insert("summer","40℃");
wMap1.insert("autumn","23℃");
wMap1.insert("winter","-5℃");
wMap1.insert("winter","-15℃");
wMap1.insert("winter","-55℃");
qDebug() << endl << "初始化wMap1:" << wMap1;
wMap1.remove("winter","-55℃");
qDebug() << endl << "删除winter:-55℃后" << wMap1;
qDebug() << endl << "winter:"
<<wMap1.values("winter");
//Java风格只读迭代
QMapIterator<QString,QString> i_r1(wMap1);
qDebug() << endl << "初始化季节遍历:";
for(i_r1.toFront(); i_r1.hasNext();)
qDebug() << i_r1.key()
<< ":"
<< i_r1.next().value();
//QHash类
QHash<int,QString> moneyHash;
moneyHash.insert(1,"一块钱");
moneyHash.insert(10,"十块钱");
moneyHash.insert(20,"二十块钱");
moneyHash[50] = "五十块钱";
moneyHash[100] = "一百块钱";
moneyHash.insertMulti(100,"毛爷爷");
//Java风格只读迭代器
QHashIterator<int,QString> it_mr(moneyHash);
qDebug() << endl << "只读正遍历人民币:";
for(it_mr.toFront(); it_mr.hasNext();)
qDebug() << it_mr.key()
<< ":"
<< it_mr.next().value();
//Java风格读写迭代器
QMutableHashIterator<int,QString> it_mrw(moneyHash);
//修改数据
if( it_mrw.findNext("十块钱") )
it_mrw.setValue("10元");
qDebug() << endl << "更新10元后遍历:";
for(it_mrw.toFront(); it_mrw.hasNext();)
qDebug() << it_mrw.key()
<< ":"
<< it_mrw.next().value();
return a.exec();
}
以上是关于QMap类 QHash类的主要内容,如果未能解决你的问题,请参考以下文章