vector去掉重复项
时间: 2023-06-13 21:02:15 浏览: 79
可以使用STL中的`std::unique`函数来去除vector中的重复项。这个函数会将所有相邻的重复元素都移到vector的尾部,然后返回一个迭代器,指向vector中不重复的部分的结尾。最后再使用`std::vector::erase`函数将重复元素删除即可。
示例代码如下:
```c++
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 3, 5, 6, 6};
std::sort(vec.begin(), vec.end()); // 先对vector进行排序
auto end = std::unique(vec.begin(), vec.end()); // 去重
vec.erase(end, vec.end()); // 删除重复元素
return 0;
}
```
执行完这段代码后,`vec`中将只剩下不重复的元素:`{1, 2, 3, 4, 5, 6}`。
相关问题
vector去除重复元素个数
在C++中,如果你有一个`std::vector`容器并想要计算其中重复元素的数量,可以采用多种方法。一种常见的方式是利用`std::unordered_set`,因为它不允许有重复元素,所以你可以先将`vector`转换成`unordered_set`,然后比较两个集合的大小差异:
```cpp
#include <vector>
#include <unordered_set>
size_t count_duplicates(const std::vector<int>& vec) {
std::unordered_set<int> unique_elements(vec.begin(), vec.end());
return vec.size() - unique_elements.size();
}
```
这个函数会返回`vec`中独特元素的数量,重复的元素已经从计数中减去。
如果你想直接在原地操作并保留`vector`,可以使用`std::unique`算法配合`std::remove_if`:
```cpp
size_t count_duplicates(const std::vector<int>& vec) {
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
return vec.size();
}
```
这将删除连续的重复项,并返回新的元素数量,即非重复元素的数量。
c++ vector<Point> 去除重复点
在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`类有一个小于运算符重载,以便对向量进行排序。
阅读全文