QMap的升序排序,巧妙避开默认排序规则。

86 篇文章 1 订阅

结论:QMap的升序排序是指对key值的首字母的Ascii码顺序来确定的。

以下通过一个示例来看看QMap怎么排序的。
ASCII码表:
请添加图片描述
示例:

    QMap<QString,QString> map;
    QStringList list;
    list<<"1"<<"2"<<"3"<<"11"<<"21"<<"!"<<"/"<<":"<<"A"<<"/A"<<"!:"<<"A1";
    for (int i = 0; i < list.size(); ++i) {
        map.insert(list[i],QString::number(i));
    }

    for (QMap<QString,QString>::const_iterator it = map.begin(); it != map.end(); it++) {
        qDebug()<<it.key()<<it.value();
    }

结果:
在这里插入图片描述

从插入规则和结果,对照ASCII码表不难看出map的排序都是按照key值首字母的顺序来排序的,
我们现在把list改成 :
list<<“1”<<“2”<<“3”<<“11”<<“21”<<“!”<<“/”<<“:”<<“A”<<“/A”<<“!:”<<“A1”<<“/1”<<“/:”;
结果:
在这里插入图片描述
可以看出多个字符的key值,首字母排序后,如果首字母相同,则从第二个字母按照ASCII顺序来排序。

通过以上规律当我们需要顺序排序时,就不要将key值的类型定义为QString、QByteArray等字符串类型,而需要定义为int型。
如下示例:

    QMap<int,QString> map;
    QList<int> list;
    list<<1<<2<<3<<11<<21<<'!'<<'/'<<':';
    for (int i = 0; i < list.size(); ++i) {
        map.insert(list[i],QString::number(i));
    }

    for (QMap<int,QString>::const_iterator it = map.begin(); it != map.end(); it++) {
        qDebug()<<it.key()<<it.value();
    }

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东方忘忧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值