如何对vector去重
时间: 2024-10-08 09:25:18 浏览: 46
实现从vector中过滤重复的数据
5星 · 资源好评率100%
在C++中,对于`std::vector`去重,有几种常见的方法。这里列举了两种常见的方式:
**1. 利用set容器去重**
由于`set`内部数据结构是有序并且不允许有重复元素,可以先将`vector`转换为`set`,然后再转回`vector`实现去重:
```cpp
std::vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4}; // 待去重的vector
std::set<int> unique_set(vec.begin(), vec.end());
vec.clear(); // 清除原始vector
vec.insert(unique_set.begin(), unique_set.end()); // 将set的内容复制回vector
```
这种方法时间复杂度较高,因为插入和查找操作的时间复杂度都是O(log n)。
**2. 自己实现排序去重**
另一种方法是对`vector`进行排序,然后逐个检查相邻元素,如果有重复就移除后面的元素:
```cpp
std::sort(vec.begin(), vec.end()); // 先排序
for (size_t i = 1; i < vec.size(); ++i) {
if (vec[i] == vec[i - 1]) {
vec.erase(vec.begin() + i); // 删除重复元素
--i; // 因为元素减少,需要调整i
}
}
```
这种方法时间复杂度较低,约为O(n log n),但由于涉及多次元素移动,内存消耗可能会增加。
阅读全文