c++ vector去重并且不改变数据的顺序
时间: 2024-12-01 14:30:14 浏览: 9
在C++中,如果你有一个`std::vector`需要去除其中的重复元素,同时保持原有的顺序,可以使用`std::unordered_set`或者`std::set`辅助,因为集合不会包含重复元素。这里是一个简单的方法:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
// 函数模板用于去重并保持原顺序
template<typename T>
std::vector<T> removeDuplicates(const std::vector<T>& vec) {
std::unordered_set<T> uniqueElements;
std::vector<T> result;
// 遍历原向量,只将未见的元素添加到结果和哈希集中
for (const auto& element : vec) {
if (!uniqueElements.count(element)) {
uniqueElements.insert(element);
result.push_back(element);
}
}
return result;
}
int main() {
std::vector<int> input = {1, 2, 2, 6, 6, 4, 3, 5, 1};
std::vector<int> unique_and_sorted = removeDuplicates(input);
for (const auto& num : unique_and_sorted) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
在这个例子中,`std::unordered_set`用于查找重复元素,`std::vector`用于收集不重复的元素,通过`count()`函数判断元素是否已存在于集合中。
阅读全文