我有一个结构体 Point 存放 double x double y double z 还有一个 Qlist〈Point〉存放若干数据,但是这些 Point 有重复的,如何去重,c++11 书写
时间: 2025-01-25 14:14:34 浏览: 33
在C++11中,你可以利用`QList<Point>::erase`方法配合`QSet<Point>`来去重。`QSet`是一个无序的、不允许重复的集合,非常适合用于去重。首先将`QList<Point>`转换为`QSet`,然后再从`QSet`转回`QList`:
```cpp
#include <QList>
#include <QSet>
#include <QVector> // 或者其他你希望使用的容器
// 假设你已经有一个QList叫做dataList
QList<Point> dataList;
// 先将QList转换为QSet去重
QSet<Point> dataSet = dataList; // 数据会自动去重
dataSet.make_unique(); // 如果Qt版本支持,可以用make_unique来优化内存操作
// 然后转换回QList,此时就只有独特的点
QList<Point> uniqueDataList(dataSet.begin(), dataSet.end()); // 或者QVector if you prefer
```
这里的`make_unique`是Qt 5.6开始引入的功能,它会移除重复并确保内存安全,而不会创建额外的拷贝。如果你的Qt版本低于5.6,那么可以简单地使用`QVector<Point>(dataSet)`。
注意,由于`QSet`是无序的,所以原始顺序可能会丢失。
相关问题
我有一个结构体 Point 存放 double x double y double z 还有一个 Qlist〈Point〉存放若干数据,但是这些 Point 有重复的,如何去重,c++
在 C++ 中,如果你有一个 `QList<Point>` 并想要去除其中的重复元素,可以先将它们转换成集合(如 `set` 或者 `unordered_set`),因为集合自动去重。然后,你可以遍历这个集合并添加回列表。这里是一个简单的步骤:
```cpp
#include <QList>
#include <set>
#include <QPair>
// 假设你已经有了一个名为points的QList<Point>
std::set<QPair<double, QPair<double, double>>> uniquePoints; // 使用QPair作为键值对存储(x, y, z)
for (const auto& point : points) {
uniquePoints.insert({point.x, {point.y, point.z}});
}
QList<Point> DISTINCT_points;
for (const auto& [x, pair] : uniquePoints) {
DISTINCT_points << Point(x, pair.first, pair.second);
}
```
这样,DISTINCT_points 就包含了无重复的 Point 列表。
阅读全文
相关推荐















