QHash的使用

1. 创建

键值对的方式插入,数据类型随意,这里以键int,值QString示例。
QHash<int,QString> qhash;

2. 插入

//方式一
qhash[1] = "1";
qhash[2] = "2";
qhash[3] = "3";
//方式二
qhash.insert(4, “4”);
//通常,QHash 每个键只允许有一个值。如果用已经存在的键调用 insert(),先前的值将被删除
hash.insert(4,"10);//最后键为4的值将变成“10”。

3. 取值;

//方式一
QString str1=qhash.value(1);//str1="1";
//方式二
QString str2=qhash[2];//str1="2";
 如果qhash里面没有该键值,则返回默认构造值;比如:QString str3=qhash.value(5);//str3="";

4. 检索某个值是否在里面

if(qhash.contains(9))
    {
        return false;
    }

if(qhash.contains(1))
    {
        return true;
    }

5. 查找某个字并获取,一般推荐contains结合value重载函数来实现,

QString str;
if(qhash.contains(1))
    {
        str=qhash.value(1);
    }
else
    {
        str=qhash.value(1,"wert");
        //如果哈希表中不存在指定键的元素,该函数使用第2个参数作为默认值
    }
而不是 operator 运算符查找哈希表中的键。原因是如果哈希表中不存在相同键的元素,operator 运算符会默默地将一个元素插入到哈希表中(除非哈希表是 const 的)

//错误
for (int i = 0; i < 1000; ++i) {
    if (qhash[i] == "789")
        cout << "Found value at index " << i << Qt::endl;
}
为了避免这个问题,将上面代码中的 hash[i] 替换为 hash.value(i),为什么这样可以,来我们来看看value的函数原型:const T value ( const Key & key ) const ;const啊姐妹!

6. 遍历 QHash 中存储的所有键值对

QHash<int,QString>::const_iterator it = qhash.constBegin();
while (it != qhash.constEnd()) {
    cout << it.key() << ": " << it.value() << Qt::endl;
    ++it;
}
当然不用const_iterator也可以,直接iterator;

7. 删除,下面两种都可以

qhash.erase(it);//这里的it是迭代器
qhash.remove(key);
posted @ 2024-07-16 09:49  checha  阅读(1)  评论(0编辑  收藏  举报