哈希表在QT中的應用舉例
時間:2017-01-05作(zuo)者:華清(qing)遠見(jian)
哈希表,是根據(ju)關鍵碼值(zhi)(Key value)而直接進行訪問(wen)的(de)數據(ju)結構。也就是說,它通過把關鍵碼值(zhi)映(ying)射到表中一個位置來訪問(wen)記(ji)錄,以加快查找的(de)速度。 QHash是(shi)QT類庫(ku)中的(de)一(yi)個(ge)容器(qi)類,內(nei)部(bu)維護(hu)了一(yi)張哈(ha)希表。QHash的(de)內(nei)部(bu)哈(ha)希表每次翻倍增長(chang),同時所有的(de)內(nei)部(bu)元素都重新分配到桶內(nei)。計算公式為qHash(key)%QHash::capacity() (桶的(de)個(ge)數)。下面通過(guo)一(yi)個(ge)例子,來說明QHash類的(de)使用。 這個例子中的(de)主窗口,類(lei)似QQ的(de)好友(you)列表,雙擊(ji)一(yi)個好友(you),彈出聊天對(dui)話框(kuang),標題顯示chat with +列表框(kuang)中的(de)內(nei)容。多次(ci)雙擊(ji)同(tong)一(yi)個好友(you),應(ying)該只(zhi)有第一(yi)次(ci)彈對(dui)話框(kuang)。 代碼為:
QString id = ui->listWidget->currentItem()->text(); 當(dang)多(duo)次雙擊同一個列表項時(shi),如下圖所(suo)示,同樣的窗口彈出了(le)多(duo)個,邏輯(ji)上不合(he)理。
為了解決這(zhe)個問題,需(xu)要(yao)用到(dao)哈希表,用到(dao)QHash類。 實現過程如下: 1) 首先,需要(yao)在界面(mian)類中,引入(ru)頭文件. #include <QHash> 2) 在類中加(jia)入(ru)一個私有成員: QHash<QString, ChatDialog *> chatFormHash; 3) 做(zuo)信號和槽的關(guan)聯 QObject::connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),this, SLOT(newWindow())); 4) 實現newWindow()函(han)數
QString id = ui->listWidget->currentItem()->text(); 列表(biao)框(kuang)中的(de)列表(biao)項(xiang)字符串,作為(wei)哈希(xi)表(biao)中的(de)key值(zhi),聊天窗(chuang)口(kou)的(de)地址(zhi)(zhi)做為(wei)哈希(xi)表(biao)的(de)value.當哈希(xi)表(biao)中沒有某(mou)個(ge)key時,創建一個(ge)新窗(chuang)口(kou)。當第(di)二次,雙擊同一個(ge)列表(biao)項(xiang)時,直接從哈希(xi)表(biao)中查找窗(chuang)口(kou)的(de)地址(zhi)(zhi)即可,不需要再(zai)次創建,就解決(jue)了上面的(de)問(wen)題。界(jie)面如下:
發表評論
|