大家好,欢迎来到IT知识分享网。
QMap和QHash是Qt框架中用于存储键值对的容器类,它们有以下区别、应用场景以及优缺点:
区别:
- 数据结构:QMap基于红黑树实现,保证元素有序;而QHash基于哈希表实现,没有固定顺序。
- 内存消耗:由于红黑树需要额外的内存来维护树结构,所以QMap相比QHash占用更多的内存。
- 查找效率:由于红黑树的特性,QMap在查找操作上具有较好的性能;而QHash通过哈希函数计算索引,查找速度通常更快。
两者时间复杂度比较
容器类 |
键查找 |
插入 |
||
平均 |
最坏 |
平均 |
最坏 |
|
QMap |
O(log n) |
O(log n) |
O(log n) |
O(log n) |
QHash |
Amort.O(1) |
O(n) |
Amort.O(1) |
O(n) |
4 QMap类
QMap<Key, T>提供了一个从类型为Key的键到类型为T的值的映射。
5 QHash类
QHash<Key, T>具有与QMap几乎完全相同的API。QHash维护着一张哈希表(Hash Table),哈希表的大小与QHash的数据项的数目相适应。
【文章福利】Qt开发学习资料包、大厂面试题、技术视频和学习路线图,包括(Qt C++基础,数据库编程,Qt项目实战、Qt框架、QML、Opencv、qt线程等等)有需要的可以进企鹅裙领取哦~
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; }
运行结果如下图:
应用场景:
- QMap适用于需要按照键排序或者进行范围查询的情况。例如字典、关联数组等。
- QHash适用于大量数据快速查找、插入和删除的情况。例如缓存、索引等。
优缺点:
QMap:
- 优点:提供了按照键排序的功能,支持范围查询,在某些场景下具有更好的性能;
- 缺点:相比QHash,占用更多内存空间,并且插入/删除操作可能略慢。
QHash:
- 优点:在大部分情况下具有更好的查找、插入和删除性能,占用较少的内存;
- 缺点:没有固定顺序,不支持范围查询。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/181307.html