QMap
QMap<Key, T>:
它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。一般每一个键关联单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快。
QMap<QString,QString> inmap;
//添加元素
inmap.insert("小王","8000元");
inmap["小蓝"] = "1000元";
//通过key找value
qDebug() << inmap["小王"]
<<inmap.value("小蓝");
//通过value找key
qDebug() << inmap.key("1000元");
//java风格只读
QMapIterator<QString,QString> j_r(inmap);
for(j_r.toFront();j_r.hasNext();){
j_r.next();
qDebug() << j_r.key() << ":" << j_r.value();
}
//java风格读写
QMutableMapIterator<QString,QString> j_rw(inmap);
if(j_rw.findNext("8000元"))
j_rw.setValue("8001元");
for(j_rw.toFront();j_rw.hasNext();){
j_rw.next();
qDebug() << j_rw.key() << ":" << j_rw.value();
}
QMultiMap
QMultiMap<Key, T>:
它是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以关联多个值。
QMultiMap<QString,QString> mp;
mp.insert("小王","1234");
mp.insert("小王","4444");
mp.insert("小王","5555");
mp.insert("小黑","1111");
mp.insert("小白","0000");
//STL迭代器只读
qDebug() << "使用STL"<<endl;
QMultiMap<QString,QString>::const_iterator m_cs;
m_cs = mp.constBegin();
for(;m_cs != mp.constEnd();++m_cs){
qDebug() << m_cs.key() << ":" << m_cs.value();
}
//删除
mp.remove("小王","4444");
//获取这个参数的所有值
qDebug() << mp.values("小王");
QHash
1、QHash比QMap找查速度快;
2、QHash元素无序排列,QMap有序排列;
QHash<int,QString> money;
money.insert(1,"一块钱");
money.insert(10,"十元");
money.insertMulti(100,"一百元");//标识需要存相同的键
money.insertMulti(100,"100元");
money[50] = "五十元";
qDebug() << money;
//java风格只读迭代器
QHashIterator<int,QString> hash(money);
for(hash.toFront();hash.hasNext();){
qDebug() << hash.key() << ":" << hash.next().value();
}
//读写
QMutableHashIterator<int,QString> hs_rw(money);
qDebug() << "使用java读写";
if(hs_rw.findNext("十元"))
hs_rw.setValue("10元");
for(hs_rw.toFront();hs_rw.hasNext();){
qDebug() << hs_rw.key() << ":" << hs_rw.next().value();
}
QMap 与 QHash 差别:
①QHash 比 QMap 查找速度更快。
②QHash 以任意顺序存储,QMap 以 Key 顺序存储数据。
③QHash 的 Key 必须提供 operator==()及一个全局的 qHash(Key)函数,而 QMap 的 Key 必
须提供 operator<()函数。
存储一键多值数据时可使用 QMultiMap<Key,T>容器或 QMultiHash<Key,T>容器。