对上述建立的QPoint对象中所有点按y值从小到大排列,并输出到一个新的QPoint对象rankpoint中,QPoint中的数据不要改变
时间: 2024-10-02 09:02:37 浏览: 32
QPointDemo.rar 配套本人博文《Qt基础类01-坐标类QPoint》的测试验证例程
为了按照y坐标对`QPoint`对象中的点进行排序,你需要使用`std::sort`函数,但是Qt的`QList`和`QVector`等容器并不直接支持这种方法。不过,你可以先将它们转换成`QPointF`数组,然后利用数组进行排序,最后再转换回`QPoint`。这里是一个例子:
```cpp
#include <algorithm>
#include <QVector>
// 假设points是一个包含QPoint对象的QVector
QVector<QPoint> points = ...;
// 创建一个临时的QPointF数组,因为QPoint没有提供比较操作
QVector<QPointF> sortedPoints(points.size());
for (int i = 0; i < points.size(); ++i) {
sortedPoints[i] = QPointF(points[i].x(), points[i].y());
}
// 按照y坐标排序
std::sort(sortedPoints.begin(), sortedPoints.end(), std::greater<QPointF>());
// 现在sortedPoints已经是按照y值升序排列的
// 创建新的QPoint对象用于存储排序后的结果
QVector<QPoint> rankPoints(sortedPoints.size());
for (int i = 0; i < sortedPoints.size(); ++i) {
rankPoints[i] = QPoint(sortedPoints[i].x(), sortedPoints[i].y());
}
// 输出rankPoints,它现在保存了原始QPoint对象按y值排序的结果
```
请注意,这会改变`sortedPoints`数组,但不会影响原`points`中的QPoint。
阅读全文