1 目录及资源索引
2 参考文章说明
3 简介及时间复杂度比较
QMap和QHash其实类似于C++中的Map和Hash类,只不过在QT中,加以封装。
Map:Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。说明:map是以值传递的形式保存数据的。
Hash:QHash<K, T>是一个在哈希表中存储键值对的数据结构。它的接口几乎与QMap<K, T>相同,但是与QMap<K, T>相比,它对K的模板类型有不同的要求,而且它提供了比QMap<K, T>更快的查找功能。
QMap类和QHash类具有非常类似的功能,差别如下:
- QHash具有比QMap更快的查找速度;
- QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据;
- QHash的键类型Key必须提供 operator == () 和一个全局的 qHash(Key) 函数,而QMap的键类型Key必须提供 operator < () 函数。
二者时间复杂度比较如下图:
4 QMap类
QMap<Key, T>提供了一个从类型为Key的键到类型为T的值的映射。
5 QHash类
QHash<Key, T>具有与QMap几乎完全相同的API。QHash维护着一张哈希表(Hash Table),哈希表的大小与QHash的数据项的数目相适应。
6 Java风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,具体分类如下图:
#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString, QString> map; // 定义一个关联容器
map.insert("beijing", "111"); // 添加内容 对应 键值 - 内容
map.insert("shanghai", "021");
map.insert("nanjing", "025");
QMapIterator<QString,QString> i(map); // 为遍历容器定义变量
for(;i.hasNext();)
qDebug()<<" "<<i.key()<<" "<<i.next().value();
QMutableMapIterator<QString,QString> mi(map);
if(mi.findNext("111")) // 按内容查找 查找到内容为 "111" 替换为 "010"
mi.setValue("010");
QMapIterator<QString,QString> modi(map);
qDebug()<<" ";
for(;modi.hasNext();)
qDebug()<<" "<<modi.key()<<" "<<modi.next().value();
return 0;
}
运行结果如下图:
7 STL风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型,即只读访问和读写访问,具体分类如下图:
#include <QDebug>
int main(int argc,char *argv[])
{
QMap<QString,QString> map;
map.insert("beijing", "111");
map.insert("shanghai", "021");
map.insert("nanjing", "025");
QMap<QString,QString>::const_iterator i; // 遍历 打印一遍原始信息
for(i=map.constBegin();i!=map.constEnd();++i)
qDebug()<<" "<<i.key()<<" "<<i.value();
QMap<QString,QString>::iterator mi; // 查找 按键值进行查找 替换键值为beijing的内容
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;
}
运行结果如下图:
8 总结
- STL:C++标准模板库;
- 一个按照内容查找,一个按照键值查找。
- 程序理解不是很深入,只是知道大概意思,需加强。