c++ vector<Point> 去除重复点
时间: 2024-10-18 14:08:30 浏览: 57
在C++中,如果你有一个`vector<Point>`容器,其中包含许多`Point`对象,并且你想去除其中的重复点,可以采用多种方法:
1. **使用`std::set`**:由于`set`是一个不允许有重复元素的数据结构,你可以先将`vector`转换为`set`,然后再将其转换回`vector`。这会自动删除重复项,因为每个元素都是唯一的。
```cpp
std::set<Point> uniqueSet(points.begin(), points.end());
vector<Point> uniquePoints(uniqueSet.begin(), uniqueSet.end());
```
2. **自定义函数**:创建一个函数来比较两个点是否相等,然后遍历整个向量并移除重复的点。
```cpp
bool isDuplicate(const Point& a, const Point& b) {
return a.x == b.x && a.y == b.y;
}
vector<Point> removeDuplicates(vector<Point>& points) {
vector<Point> unique_points;
for (const auto& point : points) {
if (unique_points.empty() || !isDuplicate(point, unique_points.back())) {
unique_points.push_back(point);
}
}
return unique_points;
}
```
3. **利用STL算法**:如果允许使用C++17或更高版本,可以使用`std::remove_if`和`std::unique`结合`std::copy`来简化操作:
```cpp
std::vector<Point> removeDuplicates(std::vector<Point>& points) {
std::sort(points.begin(), points.end(), [](const Point& a, const Point& b) { return a < b; }); // 如果不希望改变原始顺序,去掉这一行
points.erase(std::unique(points.begin(), points.end()), points.end());
return points;
}
```
在这个例子中,我们假设`Point`类有一个小于运算符重载,以便对向量进行排序。
阅读全文