c++ 递归去除vector 中重复自定义结构体
时间: 2024-12-08 10:23:29 浏览: 28
在C++中,如果你有一个自定义结构体并且想要从`std::vector`中移除所有重复项,可以使用递归来遍历并检查每个元素是否已经存在于集合中。这里是一个简单的例子,假设你的结构体名为`MyStruct`:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
// 自定义结构体 MyStruct
struct MyStruct {
// 假设这里有两个字段用于唯一标识
int field1;
std::string field2;
bool operator==(const MyStruct& other) const {
return field1 == other.field1 && field2 == other.field2;
}
};
// 使用一个无序集合(Set)来存储已见的元素
std::unordered_set<MyStruct> seenElements;
// 递归函数,接收vector和索引作为参数
void removeDuplicates(std::vector<MyStruct>& vec, size_t index = 0) {
if (index >= vec.size()) {
// 如果已到达末尾,结束递归
return;
}
// 检查当前元素是否已经在集合中
if (seenElements.find(vec[index]) != seenElements.end()) {
// 如果存在,则删除并继续处理下一个
vec.erase(vec.begin() + index);
return removeDuplicates(vec, index); // 递归调用,跳过已删除的位置
} else {
// 如果不存在,添加到集合中然后进入下一层迭代
seenElements.insert(vec[index]);
return removeDuplicates(vec, index + 1);
}
}
int main() {
std::vector<MyStruct> myVector = { /* ... */ }; // 填充你的向量
removeDuplicates(myVector);
// 输出处理后的vector
for (const auto& item : myVector) {
std::cout << "Item: {" << item.field1 << ", " << item.field2 << "}\n";
}
return 0;
}
```
在这个示例中,`removeDuplicates` 函数会通过递归地比较每个元素和之前见过的元素来移除重复。如果遇到重复,就从向量中删除该元素,并调整递归调用的索引来忽略已删除的元素。
阅读全文