QHash 和QMap的区别

本文详细对比了Qt中的QHash与QMap这两种容器类。QHash以哈希表形式存储数据,查找速度快,但不保持顺序;QMap则按键值排序存储数据,支持键值比较操作。两者都可用于一键多值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍的是Qt QHash QMap的区别,关于容器类可以查阅更多的资料,首先我们先把QHash QMap区分开来。内容如下。

QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap

QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash

两种之间的区别是:

QHash查找速度上显著于QMap

QHash以任意的方式进行存储,而QMap则是以key顺序进行存储.

Qhash 的键类型必须提供operator==()和yige 全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数.

他们同样也是有两种风格的迭代容器。用来进行遍历的。

STL 风格的

QMap<key,T>  QMap<key,T>::const_iterator QMap<key,T>::iterator//同样中间那个也是只读的,最后那个是读写的。下面以一个例子来进行说明:

    #include <QDebug> 
    int main(int argc, char *argv[])  
    {  
        QMap<QString, QString> map;  
        map.insert("beijing", "111");  
        map.insert("shanghai", "021");  
        map.insert("tianjin", "022");  
        map.insert("chongqing", "023");  
        map.insert("jinan", "0531");  
        map.insert("wuhan", "027");     
    QMap<QString, QString>::const_iterator i;  
        for( i=map.constBegin(); i!=map.constEnd(); ++i)  
            qDebug() << i.key() <<"        " << i.value();     
           
        QMap<QString, QString>::iterator mi;  
        mi = map.find("beijing");  
        if(mi != map.end())  
            mi.value() = "010";  
        QMap<QString, QString>::const_iterator modi;  
        qDebug() << "";  
        for( modi=map.constBegin(); modi!=map.constEnd(); ++modi)  
            qDebug() << modi.key() <<"        " << modi.value();     
        return 0;  
    } 
小结:关于QtQHash QMap的区别,相信你看完之后,应该很了然一新了。如果你需要对内存分配做优化,Qt的容器提供了三大内存分配函数,reserve(size),显示预分配size的内存; capacity(),返回已分配内存;squeeze()释放所有的未占用的内存;当你知道QHash的大小时,可以使用reserve函数预先分配内存。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值