std::set 自定义类去重
时间: 2023-10-23 18:10:02 浏览: 183
要在 std::set 中使用自定义类进行去重,你需要重载该类的比较运算符。默认情况下,std::set 使用 std::less 运算符来比较元素,但你可以自定义比较函数。
首先,确保你的自定义类重载了 < 运算符。然后,你可以为 std::set 提供一个自定义的比较函数,例如:
```cpp
struct MyClass {
int value;
bool operator<(const MyClass& other) const {
return value < other.value;
}
};
// 自定义比较函数
struct Compare {
bool operator()(const MyClass& a, const MyClass& b) const {
return a.value < b.value;
}
};
int main() {
std::set<MyClass, Compare> mySet;
MyClass obj1{5};
MyClass obj2{2};
MyClass obj3{7};
mySet.insert(obj1);
mySet.insert(obj2);
mySet.insert(obj3);
for (const auto& obj : mySet) {
// 输出:2 5 7
std::cout << obj.value << " ";
}
return 0;
}
```
在上面的示例中,我们创建了一个 MyClass 类,并重载了 < 运算符。然后,我们定义了一个名为 Compare 的比较函数对象,该函数对象在 std::set 中用于比较 MyClass 对象。最后,我们创建了一个 std::set 实例,并将自定义类的对象插入其中。循环遍历 std::set 输出结果时,元素将按照自定义比较函数的规则排序并去重。
阅读全文