title: “ QHash和QMultiHash使用\t\t”
tags:

  • qhash
  • QMultiHash
  • qt
    url: 557.html
    id: 557
    categories:
  • Qt
    date: 2017-12-06 13:23:13

介绍

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

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的值类型还需要提供一个operator==(),并需要一个能够为键返回哈希值的全局qHash()函数的支持。Qt已经为qHash()函数提供了对整型、指针型、QChar、QString以及QByteArray。 QMultiHash类似于QMultiMap相对于QMap的,实现了但key对应多值。 相关帮助文档:QHashQMultiHash

简单范例

QHash

include

include

QHash 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()< }
qDebug()< qDebug()< qDebug()< qDebug()< qDebug()< qDebug()< qDebug()<<m_map.keys(77);//测试同value不同key

结果

“as” 13
11
23
0
(23)
“”
“t2”
(“t2”, “t1”)

QMultiHash

QMultiHash 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()< }
qDebug()< qDebug()< qDebug()< qDebug()< qDebug()< qDebug()< qDebug()< //修改必须用replace
m_map.replace(“b”,25);//讲第一个key=b的修改为了25
m_map.replace(“t3”,77);//由于没有t3=77所以新增加了一个
qDebug()< qDebug()<<m_map.keys(77);

结果

0
23
0
(23, 22)
“b”
“t1”
(“t1”, “t2”)
(25, 22)
(“t1”, “t2”, “t3”)

自定义类型实现hash

QSet使用-自定义类型,QSet也是利用哈希表实现,原理相同。