Qt无序键值对

小王子🤴 2020-10-29 12:30:00 8305

QMap是一个键值对类,跟标准C++的map类基本类似,声明原型如下:

QMap<T1,T2> map1

T1为键值对中的键key,T2为键值对中的值。通过键值对中的键可以搜索到值。一般来说,键值对中的键是唯一的,不可重复,而值没有要求,可以重复。并且QMap具有自动排序功能,对输入的键进行排序。
Qt的键值对容器都是自带排序的,直接上代码

#include <QMap>
int main(int argc, char *argv[])
{
    QMap<int,QString> map;
    map.insert(3,"map3");
    map.insert(1,"map1");
    map.insert(2,"map2");
    map.insert(6,"map6");
    map.insert(4,"map4");
    map.insert(5,"map5");
    map.insert(8,"map8");
    map.insert(7,"map7");
    map.insert(11,"map11");
    map.insert(9,"map9");
    map.insert(10,"map10");
    for (auto i = map.begin();i != map.end();i++) {
        std::cout << "key:" << i.key() << "value:" << i.value().toStdString() << "\n";
    }
    return 0;
}

运行结果:
存储map时顺序是打乱的,但是打印结果是顺序的,这是因为QMap是有序容器,数据存储后会被自动排序,但有时候我们想要无序的键值对。
无序键值对:QList<QPair<type,type>>

#include <QList>
#include <QMap>
int main(int argc, char *argv[])
{

    QList<QPair<int,QString>> map;
    map.append(QPair<int,QString>(2,"map2"));
    map.append(QPair<int,QString>(1,"map1"));
    map.append(QPair<int,QString>(4,"map4"));
    map.append(QPair<int,QString>(3,"map3"));
    map.append(QPair<int,QString>(7,"map7"));
    map.append(QPair<int,QString>(5,"map5"));
    map.append(QPair<int,QString>(6,"map6"));
    map.append(QPair<int,QString>(9,"map9"));
    map.append(QPair<int,QString>(8,"map8"));
    map.append(QPair<int,QString>(11,"map11"));
    map.append(QPair<int,QString>(10,"map10"));
    foreach (auto i, map) {
        std::cout << "key:" <<i.first << "value:" << i.second.toStdString() << "\n";
    }
//    QMap<int,QString> map;
//    map.insert(3,"map3");
//    map.insert(1,"map1");
//    map.insert(2,"map2");
//    map.insert(6,"map6");
//    map.insert(4,"map4");
//    map.insert(5,"map5");
//    map.insert(8,"map8");
//    map.insert(7,"map7");
//    map.insert(11,"map11");
//    map.insert(9,"map9");
//    map.insert(10,"map10");
//    for (auto i = map.begin();i != map.end();i++) {
//        std::cout << "key:" << i.key() << "value:" << i.value().toStdString() << "\n";
//    }
    return 0;
}

运行结果:

运行结果与存储顺序相同

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 15 8 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区