zoukankan      html  css  js  c++  java
  • QHash和QMultiHash使用

    博客地址已更改,文章数量较多不便批量修改,若想访问源文请到 coologic博客 查阅,网址:www.coologic.cn

    如本文记录地址为 techieliang.com/A/B/C/ 请改为 www.coologic.cn/A/B/C/ 即可查阅

    版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
    本文标题:QHash和QMultiHash使用     本文地址:http://techieliang.com/2017/12/557/

    1. 介绍

    QHash<Key, T>是一个在哈希表中存储键值对的数据结构。它的接口几乎与QMap<Key, T>相同,但是与QMap<Key, T>相比,它对ey的模板类型有不同的要求,而且它提供了比QMap<Key, T>更快的查找功能。

    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。

    QMultiHash类似于QMultiMap相对于QMap的,实现了但key对应多值。

    相关帮助文档: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

    结果

    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也是利用哈希表实现,原理相同。

    转载请以链接形式标明本文标题和地址:Techie亮博客 » QHash和QMultiHash使用
  • 相关阅读:
    281. Zigzag Iterator
    298. Binary Tree Longest Consecutive Sequence
    482. License Key Formatting
    361. Bomb Enemy
    373. Find K Pairs with Smallest Sums
    304. Range Sum Query 2D
    308. Range Sum Query 2D
    307. Range Sum Query
    303. Range Sum Query
    247. Segment Tree Query II
  • 原文地址:https://www.cnblogs.com/techiel/p/7994360.html
Copyright © 2011-2022 走看看