C++ 自定义类型的vector 去重
时间: 2023-09-12 15:03:54 浏览: 55
可以使用STL库中的`std::unique`函数对自定义类型的`vector`进行去重操作。但是在使用前需要定义一个比较函数(operator==),用于比较两个自定义类型是否相等。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Person {
string name;
int age;
};
bool operator==(const Person& p1, const Person& p2) {
return (p1.name == p2.name && p1.age == p2.age);
}
int main() {
vector<Person> persons = {{"Alice", 18}, {"Bob", 20}, {"Alice", 18}, {"Cathy", 22}, {"Bob", 20}};
sort(persons.begin(), persons.end()); // 先排序,保证相同元素相邻
auto iter = unique(persons.begin(), persons.end());
persons.erase(iter, persons.end()); // 删除重复元素
for (const auto& person : persons) {
cout << person.name << " " << person.age << endl;
}
return 0;
}
```
在这个例子中,我们定义了一个`Person`结构体,包含姓名和年龄两个成员变量。我们重载了`operator==`,在比较两个`Person`对象是否相等时,只有当它们的姓名和年龄都相等时才返回true。然后我们定义了一个`vector<Person>`类型的`persons`,其中包含了一些重复的`Person`对象。我们首先对`persons`进行了排序,这样相同的元素就相邻了。然后我们调用`unique`函数,它会返回一个指向第一个重复元素的迭代器,我们用这个迭代器来删除重复元素。最后我们遍历`persons`,输出结果。
注意:这个方法只能去除相邻的重复元素,如果有多个相同的元素分散在不同位置,就不能完全去重。如果需要完全去重,可以使用哈希表等数据结构实现。