QMap和QHash具有非常相似的功能,它们的差别仅在于:
1.QHash具有比QMap更快的查找速度.
2.QHash以任意的顺序存储数据项,而QMap总是按照键 key的顺序存储数据.
3.QHash的键类型 Key必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型Key
必须提供一个operator<()函数。
两者时间复杂度比较
容器类 |
键查找 |
|
插入 |
|
|
平均 |
最坏 |
平均 |
最坏 |
QMap |
O(log n) |
O(log n) |
O(log n) |
O(log n) |
QHash |
Amort.O(1) |
O(n) |
Amort.O(1) |
O(n) |
QMap类:
QMap<Key ,T>提供了一个从类型为Key的键到类型为T的值得映射。
QMap存储的数据形式是一个键对应一个值,并且按照键Key的顺序存储数据。
QMap的使用例子
#include <QCoreApplication>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString,QString> map;
map.insert("beijing","111"); //map插入字符串"beijing" "111"
map.insert("shanghai","222"); //map插入字符串"shanghai" "222"
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"); //遍历查找"beijing" 的map
if(mi!=map.end())
mi.value()="001"; //替换"111"
QMap<QString,QString>::const_iterator modi;
qDebug()<<" ";
for(modi=map.constBegin();modi!=map.constEnd();modi++) //再次遍历输出map的键值
{
qDebug()<<" "<<modi.key()<<" "<<modi.value();
}
return a.exec();
}
程序输出:
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 |
关于QMap和QHash的用法及成员函数详解可参考Qt文档
http://doc.qt.io/qt-5/qmap.html
http://doc.qt.io/qt-5/qhash.html