vector删除重复元素
时间: 2024-10-08 21:22:55 浏览: 59
在C++中,如果你有一个`std::vector`并且想要删除其中的重复元素,可以采用几种方法:
1. **排序 + 判断重复**:
先对vector进行排序(如使用`std::sort`),然后遍历vector,如果当前元素等于下一个元素,就移除下一个元素。这种方法效率较低,因为每次删除都会导致后续元素移动。
```cpp
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
```
2. **使用set**:
利用`std::set`的特性,它不允许有重复元素,你可以将vector的内容转移到set中,然后再复制回vector,这会自动去除重复。
```cpp
std::set<int> s(v.begin(), v.end());
v.clear();
v.insert(s.begin(), s.end());
```
3. **自定义算法**:
使用`std::remove_if`和`std::unique`,配合迭代器,可以保留第一次出现的元素并删除其余重复的。
```cpp
auto it = std::unique(v.begin(), v.end());
v.resize(std::distance(v.begin(), it));
```
请注意,以上方法都改变了原vector的顺序,如果你想保持原有的插入顺序,那么在第二种方法中,可以用`unordered_set`代替`set`,因为`unordered_set`不会保持插入顺序,但查找速度更快。
阅读全文
相关推荐


















