QMap、QMultiMap、QHash

QMap

QMap<Key, T>:
它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。一般每一个键关联单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快。

 QMap<QString,QString> inmap;
    //添加元素
    inmap.insert("小王","8000元");
    inmap["小蓝"] = "1000元";

    //通过key找value
    qDebug() << inmap["小王"]
              <<inmap.value("小蓝");

    //通过value找key
    qDebug() << inmap.key("1000元");

    //java风格只读
    QMapIterator<QString,QString> j_r(inmap);
    for(j_r.toFront();j_r.hasNext();){
        j_r.next();
        qDebug() << j_r.key() << ":" << j_r.value();
    }

    //java风格读写
    QMutableMapIterator<QString,QString> j_rw(inmap);
        if(j_rw.findNext("8000元"))
            j_rw.setValue("8001元");
        for(j_rw.toFront();j_rw.hasNext();){
            j_rw.next();
            qDebug() << j_rw.key() << ":" << j_rw.value();
        }

QMultiMap

QMultiMap<Key, T>:
它是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以关联多个值。

 QMultiMap<QString,QString> mp;
        mp.insert("小王","1234");
        mp.insert("小王","4444");
        mp.insert("小王","5555");
        mp.insert("小黑","1111");
        mp.insert("小白","0000");


        //STL迭代器只读
        qDebug() << "使用STL"<<endl;
        QMultiMap<QString,QString>::const_iterator m_cs;
        m_cs = mp.constBegin();
        for(;m_cs != mp.constEnd();++m_cs){
            qDebug() << m_cs.key() << ":" << m_cs.value();
        }

        //删除
        mp.remove("小王","4444");

        //获取这个参数的所有值
        qDebug() << mp.values("小王");

QHash

1、QHash比QMap找查速度快;
2、QHash元素无序排列,QMap有序排列;


        QHash<int,QString> money;
        money.insert(1,"一块钱");
        money.insert(10,"十元");
        money.insertMulti(100,"一百元");//标识需要存相同的键
        money.insertMulti(100,"100元");
        money[50] = "五十元";

        qDebug() << money;

        //java风格只读迭代器
        QHashIterator<int,QString> hash(money);
        for(hash.toFront();hash.hasNext();){
            qDebug() << hash.key() << ":" << hash.next().value();
        }

        //读写
        QMutableHashIterator<int,QString> hs_rw(money);
        qDebug() << "使用java读写";
        if(hs_rw.findNext("十元"))
            hs_rw.setValue("10元");
        for(hs_rw.toFront();hs_rw.hasNext();){
            qDebug() << hs_rw.key() << ":" << hs_rw.next().value();
        }

QMap 与 QHash 差别:

①QHash 比 QMap 查找速度更快。
②QHash 以任意顺序存储,QMap 以 Key 顺序存储数据。
③QHash 的 Key 必须提供 operator==()及一个全局的 qHash(Key)函数,而 QMap 的 Key 必
须提供 operator<()函数。
存储一键多值数据时可使用 QMultiMap<Key,T>容器或 QMultiHash<Key,T>容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值