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