QHash和QMultiHash使用

版權聲明:若無來源註明, Techie亮博客文章均爲原創。 轉載請以連接形式標明本文標題和地址:
本文標題:QHash和QMultiHash使用     本文地址: http://techieliang.com/2017/12/557/

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

相關幫助文檔:QHashQMultiHash函數

2. 簡單範例

2.1. QHash

  1. #include <QHash>
  2. #include <QDebug>
  3. QHash<QString,int> m_map;
  4. m_map["a"] = 10;
  5. m_map["a"] = 11;
  6. m_map["as"] = 13;
  7. m_map.insert("b",22);//同key不一樣value
  8. m_map.insert("b",23);
  9. m_map.insert("ba",55);
  10. m_map.insert("ba",56);
  11. m_map.insert("t1",77);//同value不一樣key
  12. m_map.insert("t2",77);
  13. auto find_index = m_map.find("as");
  14. if(find_index!=m_map.end()) {
  15. qDebug()<<find_index.key()<<find_index.value();
  16. }
  17. qDebug()<<m_map.value("a");
  18. qDebug()<<m_map.value("b");
  19. qDebug()<<m_map.value("aa");
  20. qDebug()<<m_map.values("b");//測試同key不一樣value
  21. qDebug()<<m_map.key(22);
  22. qDebug()<<m_map.key(77);
  23. qDebug()<<m_map.keys(77);//測試同value不一樣key

結果post

  1. "as" 13
  2. 11
  3. 23
  4. 0
  5. (23)
  6. ""
  7. "t2"
  8. ("t2", "t1")

2.2. QMultiHash

  1. QMultiHash<QString,int> m_map;
  2. //m_map["a"] = 10;
  3. //m_map["a"] = 11;
  4. //m_map["as"] = 13;
  5. m_map.insert("b",22);//同key不一樣value
  6. m_map.insert("b",23);
  7. m_map.insert("ba",55);
  8. m_map.insert("ba",56);
  9. m_map.insert("t1",77);//同value不一樣key
  10. m_map.insert("t2",77);
  11. auto find_index = m_map.find("as");
  12. if(find_index!=m_map.end()) {
  13. qDebug()<<find_index.key()<<find_index.value();
  14. }
  15. qDebug()<<m_map.value("a");
  16. qDebug()<<m_map.value("b");
  17. qDebug()<<m_map.value("aa");
  18. qDebug()<<m_map.values("b");//測試同key不一樣value
  19. qDebug()<<m_map.key(22);
  20. qDebug()<<m_map.key(77);
  21. qDebug()<<m_map.keys(77);//測試同value不一樣key
  22. //修改必須用replace
  23. m_map.replace("b",25);//講第一個key=b的修改成了25
  24. m_map.replace("t3",77);//因爲沒有t3=77因此新增長了一個
  25. qDebug()<<m_map.values("b");
  26. qDebug()<<m_map.keys(77);

結果測試

  1. 0
  2. 23
  3. 0
  4. (23, 22)
  5. "b"
  6. "t1"
  7. ("t1", "t2")
  8. (25, 22)
  9. ("t1", "t2", "t3")

 

3. 自定義類型實現hash

QSet使用-自定義類型,QSet也是利用哈希表實現,原理相同。spa

 

 

轉載請以連接形式標明本文標題和地址: Techie亮博客 » QHash和QMultiHash使用
相關文章
相關標籤/搜索