c++17中,如何对vector中的结构体元素去重复?
时间: 2024-10-25 22:13:04 浏览: 27
在C++17中,你可以通过多种方式去除`std::vector`中结构体元素的重复。这里提供一种常用的方法,即利用`std::unordered_set`(哈希集合),因为哈希集不允许有重复元素。
首先,假设有一个名为`MyStruct`的结构体:
```cpp
struct MyStruct {
int id;
// 其他成员变量...
};
```
然后,你可以创建一个`std::vector<MyStruct>`存储数据,并将`MyStruct`实例转换为`std::pair<int, MyStruct>`(这里的id作为键)。这是因为`std::unordered_set`接受不可变的键,而`int`可以直接作为键,结构体则需要转换:
```cpp
std::unordered_set<std::pair<int, MyStruct>> uniqueSet;
// 遍历vector
for (const auto& elem : vector) {
if (!uniqueSet.count(std::make_pair(elem.id, elem))) { // 如果id和元素未存在,则添加
uniqueSet.insert(std::make_pair(elem.id, elem));
}
}
```
现在,`uniqueSet`中只包含唯一的`MyStruct`实例,根据它们的id。如果你想要转换回`std::vector<MyStruct>`,可以这样做:
```cpp
std::vector<MyStruct> distinctVector;
for (const auto& [id, value] : uniqueSet) {
distinctVector.push_back(value);
}
```
阅读全文