1. 介紹
QHash<Key, T>是一個在哈希表中存儲鍵值對的數據結構。它的接口幾乎與QMap<Key, T>相同,可是與QMap<Key, T>相比,它對ey的模板類型有不一樣的要求,並且它提供了比QMap<Key, T>更快的查找功能。html
The key type of a QMap must provide operator<(). The key type of a QHash must provide operator==() and a global hash function called qHash() (see qHash).數據結構
QMap須要提供operator<()。QHash<K, T>中K的值類型還須要提供一個operator==(),並須要一個可以爲鍵返回哈希值的全局qHash()函數的支持。Qt已經爲qHash()函數提供了對整型、指針型、QChar、QString以及QByteArray。app
QMultiHash相似於QMultiMap相對於QMap的,實現了但key對應多值。ide
相關幫助文檔:QHash、QMultiHash函數
2. 簡單範例
2.1. QHash
- #include <QHash>
- #include <QDebug>
- QHash<QString,int> m_map;
- m_map["a"] = 10;
- m_map["a"] = 11;
- m_map["as"] = 13;
- m_map.insert("b",22);//同key不一樣value
- m_map.insert("b",23);
- m_map.insert("ba",55);
- m_map.insert("ba",56);
- m_map.insert("t1",77);//同value不一樣key
- m_map.insert("t2",77);
- auto find_index = m_map.find("as");
- if(find_index!=m_map.end()) {
- qDebug()<<find_index.key()<<find_index.value();
- }
- qDebug()<<m_map.value("a");
- qDebug()<<m_map.value("b");
- qDebug()<<m_map.value("aa");
- qDebug()<<m_map.values("b");//測試同key不一樣value
- qDebug()<<m_map.key(22);
- qDebug()<<m_map.key(77);
- qDebug()<<m_map.keys(77);//測試同value不一樣key
結果post
- "as" 13
- 11
- 23
- 0
- (23)
- ""
- "t2"
- ("t2", "t1")
2.2. QMultiHash
- QMultiHash<QString,int> m_map;
- //m_map["a"] = 10;
- //m_map["a"] = 11;
- //m_map["as"] = 13;
- m_map.insert("b",22);//同key不一樣value
- m_map.insert("b",23);
- m_map.insert("ba",55);
- m_map.insert("ba",56);
- m_map.insert("t1",77);//同value不一樣key
- m_map.insert("t2",77);
- auto find_index = m_map.find("as");
- if(find_index!=m_map.end()) {
- qDebug()<<find_index.key()<<find_index.value();
- }
- qDebug()<<m_map.value("a");
- qDebug()<<m_map.value("b");
- qDebug()<<m_map.value("aa");
- qDebug()<<m_map.values("b");//測試同key不一樣value
- qDebug()<<m_map.key(22);
- qDebug()<<m_map.key(77);
- qDebug()<<m_map.keys(77);//測試同value不一樣key
- //修改必須用replace
- m_map.replace("b",25);//講第一個key=b的修改成了25
- m_map.replace("t3",77);//因爲沒有t3=77因此新增長了一個
- qDebug()<<m_map.values("b");
- qDebug()<<m_map.keys(77);
結果測試
- 0
- 23
- 0
- (23, 22)
- "b"
- "t1"
- ("t1", "t2")
- (25, 22)
- ("t1", "t2", "t3")
3. 自定義類型實現hash
見QSet使用-自定義類型,QSet也是利用哈希表實現,原理相同。spa