QHash的使用(插入、取值、遍历、删除)

1——创建,键值对的方式插入,数据类型随意,这里以键int,值QString示例。

QHash<int,QString> qhash;

2——插入

     //方式一
     qhash[1] = "1";
     qhash[2] = "2";
     qhash[3] = "3";
 
     //方式二
     qhash.insert(4, “4”);

通常,QHash 每个键只允许有一个值。如果用已经存在的键调用 insert(),先前的值将被删除 

    qhash.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);

QHash和QMap好像,我的天;但是它们两个还是有一定的区别的

  • QHash 的查找速度比 qmap 快。
  • 遍历 qmap 时,元素总是按照键的顺序排好序的。而遍历 QHash时,元素的顺序是任意的。
qt关联容器关键字查找插入
平均最差平均最差
QMap<Key, T>O(log n)O(log n)O(log n)O(log n)
QHash<Key, T>Amort. O(1)O(n)Amort. O(1)O(n)

                      

注: Amort.O(1)表示仅完成一次操作,可能会有O(n)行为;但是如果完成多次操作,如n次,平均结果是O(1)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼2333号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值