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";
qDebug() << "姚明:" << infoMap["姚明"];
qDebug() << "易烊千玺:" << infoMap.value("易烊千玺");
qDebug() << "168cm的是谁呢?"
<< infoMap.key("168cm")
<< endl;
QMapIterator<QString,QString> it_r(infoMap);
for(it_r.toFront();it_r.hasNext();)
{
it_r.next();
qDebug() << it_r.key() << ":" << it_r.value();
}
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℃");
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();
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");
QMapIterator<QString,QString> i_r1(wMap1);
qDebug() << endl << "初始化季节遍历:";
for(i_r1.toFront(); i_r1.hasNext();)
qDebug() << i_r1.key()
<< ":"
<< i_r1.next().value();
QHash<int,QString> moneyHash;
moneyHash.insert(1,"一块钱");
moneyHash.insert(10,"十块钱");
moneyHash.insert(20,"二十块钱");
moneyHash[50] = "五十块钱";
moneyHash[100] = "一百块钱";
moneyHash.insertMulti(100,"毛爷爷");
QHashIterator<int,QString> it_mr(moneyHash);
qDebug() << endl << "只读正遍历人民币:";
for(it_mr.toFront(); it_mr.hasNext();)
qDebug() << it_mr.key()
<< ":"
<< it_mr.next().value();
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();
}
|