QMap和QHash类区别,应用场景,优缺点

QMap和QHash类区别,应用场景,优缺点QMap 和 QHash 是 Qt 框架中用于存储键值对的容器类 它们有以下区别 应用场景以及优缺点 区别 数据结构 QMap 基于红黑树实现 保证元素有序 而 QHash 基于哈希表实现 没有固定顺序 内存消耗 由于红黑树需要额外的内存来维护树结构 所以

大家好,欢迎来到IT知识分享网。

QMap和QHash是Qt框架中用于存储键值对的容器类,它们有以下区别、应用场景以及优缺点:

区别:

  1. 数据结构:QMap基于红黑树实现,保证元素有序;而QHash基于哈希表实现,没有固定顺序。
  2. 内存消耗:由于红黑树需要额外的内存来维护树结构,所以QMap相比QHash占用更多的内存。
  3. 查找效率:由于红黑树的特性,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风格迭代器数据类型,即只读访问和读写访问,具体分类如下图:

QMap和QHash类区别,应用场景,优缺点

#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; } 

 运行结果如下图:

QMap和QHash类区别,应用场景,优缺点

7、STL风格迭代器遍历容器

  对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型,即只读访问和读写访问,具体分类如下图:

QMap和QHash类区别,应用场景,优缺点

#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; } 

  运行结果如下图:

应用场景:

  1. QMap适用于需要按照键排序或者进行范围查询的情况。例如字典、关联数组等。
  2. QHash适用于大量数据快速查找、插入和删除的情况。例如缓存、索引等。

优缺点:

QMap:

  1. 优点:提供了按照键排序的功能,支持范围查询,在某些场景下具有更好的性能;
  2. 缺点:相比QHash,占用更多内存空间,并且插入/删除操作可能略慢。

QHash:

  • 优点:在大部分情况下具有更好的查找、插入和删除性能,占用较少的内存;
  • 缺点:没有固定顺序,不支持范围查询。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/181307.html

(0)
上一篇 2025-06-19 10:45
下一篇 2025-06-19 11:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信