实现一个函数对cpp内无序list进行重复元素去重,但是不要改变剩余元素相对位置
时间: 2024-10-19 19:08:27 浏览: 20
大家注意vector, list, set, map成员函数erase
在C++中,可以使用`std::unordered_set`来实现对无序列表(例如`std::list`)的去重操作,同时保持元素的原始顺序。`unordered_set`是一个关联容器,它不允许重复元素,并且查找速度快。我们可以创建一个新的`list`,将原列表中的每个元素插入到`set`中,如果插入成功说明该元素唯一,则将其添加回新`list`。
以下是使用`unordered_set`实现的一个示例函数:
```cpp
#include <iostream>
#include <list>
#include <unordered_set>
// 功能:去除unordered_list中的重复元素,保持元素原始顺序
template <typename T>
void removeDuplicates(std::list<T>& list) {
std::unordered_set<T> uniqueElements;
// 遍历原list,将非重复元素添加到uniqueElements和新list中
for (auto it = list.begin(); it != list.end(); ) {
if (uniqueElements.find(*it) == uniqueElements.end()) {
uniqueElements.insert(*it);
it++;
} else {
it = list.erase(it); // 移除重复元素
}
}
}
int main() {
std::list<int> exampleList = {1, 2, 2, 3, 4, 4, 5};
removeDuplicates(exampleList);
// 打印去重后的list
for (const auto& element : exampleList) {
std::cout << element << " ";
}
std::cout << "\n";
return 0;
}
```
运行此程序后,你会看到输出为:`1 2 3 4 5 `。
阅读全文