起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 哈希表是什么

哈希表是什么

时间:2018-08-13 13:20:30来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:哈希表

前言:QHash是QT类库中的一个容器类,内部维护了一张哈希表。QHash的内部哈希表每次翻倍增长,同时所有的内部元素都重新分配到桶内。计算公式为qHash(key)%QHash::capacity() (桶的个数)。下面通过一个例子,来说明QHash类的使用。

哈希表是什么,哈希表该如何学习,哈希表在QT中的应用举例有哪些?

哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

QHash是QT类库中的一个容器类,内部维护了一张哈希表。QHash的内部哈希表每次翻倍增长,同时所有的内部元素都重新分配到桶内。计算公式为qHash(key)%QHash::capacity() (桶的个数)。下面通过一个例子,来说明QHash类的使用。

这个例子中的主窗口,类似QQ的好友列表,双击一个好友,弹出聊天对话框,标题显示chat with +列表框中的内容。多次双击同一个好友,应该只有第一次弹对话框。

代码为:

QString id = ui->listWidget->currentItem()->text();
ChatDialog *dialog = new ChatDialog(id, this);
dialog->show();

当多次双击同一个列表项时,如下图所示,同样的窗口弹出了多个,逻辑上不合理。

哈希表是什么_www.epx365.cn

为了解决这个问题,需要用到哈希表,用到QHash类。

实现过程如下:

1) 首先,需要在界面类中,引入头文件.

#include <QHash>

2) 在类中加入一个私有成员:

QHash<QString, ChatDialog *> chatFormHash;

3) 做信号和槽的关联

QObject::connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),this, SLOT(newWindow()));

4) 实现newWindow()函数

QString id = ui->listWidget->currentItem()->text();
ChatDialog *dialog;
if (this->chatFormHash.contains(id))
{
dialog = chatFormHash.value(id);
}
else
{
dialog = new ChatDialog(id, this);
this->chatFormHash.insert(id, dialog);
}
dialog->show();

列表框中的列表项字符串,作为哈希表中的key值,聊天窗口的地址做为哈希表的value.当哈希表中没有某个key时,创建一个新窗口。当第二次,双击同一个列表项时,直接从哈希表中查找窗口的地址即可,不需要再次创建,就解决了上面的问题。界面如下:

哈希表是什么_www.epx365.cn

文章出自:http://qh.itpxw.cn/peixun/software/201842407.html

文章标题:哈希表是什么



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容