QMap的排序

QMap排序方法运用实例

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

QMap 如何根据value排序?

==================================

QMap排序方法运用实例

  QMap排序方法运用实例_Music 爱好者的博客-CSDN博客

QVector<QPointF> ReadSonicPoint::sortSonicPoint(QVector<QPointF> befPointVector) //把x轴的值从小到大排序
{
    QVector<QPointF> modPointVector;
    QMap<double, double>sonicMap; //利用QMap自动排序
    for (int i = 0; i < befPointVector.size(); i++)
    {
        sonicMap.insert(befPointVector[i].x(), befPointVector[i].y());
    }
    QMap<double, double>::Iterator it = sonicMap.begin();
    while (it!=sonicMap.end())
    {
        QPointF sonicPoint;
        sonicPoint.setX(it.key());
        sonicPoint.setY(it.value());
        modPointVector.append(sonicPoint);
        i++;
    }
    return modPointVector;
}

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

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

可以看出多个字符的key值,首字母排序后,如果首字母相同,则从第二个字母按照ASCII顺序来排序。

通过以上规律当我们需要顺序排序时,就不要将key值的类型定义为QString、QByteArray等字符串类型,而需要定义为int型。:(注意:有些场景,int并不适用)。

  https://blog.csdn.net/weixin_43246170/article/details/128917491

QMap 如何根据value排序?

原文链接:

https://www.fearlazy.com/index.php/post/268.html

需求:

有一个QMap<QString,qreal> map, 存储的数据为名字对应值,如: apple -> 12.2 , orange-> 23.3,banana->10.5。 现在需要按照map元素值的升序的顺序获取QMap中的所有元素。

也就是希望获得的结果是:banana,10.5 -> apple,12.2 -> orange,23.3 。

方法:

 qSort可以实现对容器排序,但是无法对QMap使用qSort

 我们可以先将QMap中的元素放入到 QVector,然后,再对 QVector进行排序,最终获得排序后的数据。

测试:

 

为了更好理解,程序中将map元素的数据类型定义为fruit。

排序的关键在于qSort第三个参数的编写,它是一个函数,用来判断元素的大小。 为了方便 这里使用了lambda表达式。

程序输出结果:


————————————————
版权声明:本文为CSDN博主「fearlazy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/can3981132/article/details/115261721

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值