std::set比较函数使用
时间: 2024-03-07 19:34:40 浏览: 23
可以通过传入比较函数对象来指定std::set的元素比较方式。比较函数对象是一个可调用对象,它接受两个元素作为参数,并返回一个bool值,表示两个元素的大小关系。在std::set中,如果两个元素返回false,则第一个元素被认为小于第二个元素。如果两个元素返回true,则第一个元素被认为大于第二个元素。如果比较函数对象未提供,则std::set将使用默认的std::less<T>比较函数对象进行比较。
相关问题
重写std::set 的排序函数
重写std::set的排序函数可以通过自定义比较函数来实现。以下是一个示例代码:
```cpp
#include <iostream>
#include <set>
struct MyComparator {
bool operator()(const int& a, const int& b) const {
// 自定义排序规则,按照绝对值从大到小排序
return abs(a) > abs(b);
}
};
int main() {
std::set<int, MyComparator> mySet;
mySet.insert(10);
mySet.insert(-20);
mySet.insert(30);
for (auto it : mySet) {
std::cout << it << std::endl;
}
return 0;
}
```
在这个示例中,我们定义了一个名为MyComparator的结构体,重载了函数调用运算符operator(),并在其中定义了自定义的排序规则。在main函数中,我们使用这个自定义比较函数作为std::set的第二个模板参数,从而实现了重写std::set的排序函数。
输出结果将按照绝对值从大到小排序:
```
30
-20
10
```
std::set的成员函数
std::set 是 C++ STL 中的一个容器类,它是一个有序集合,其中不允许有重复的元素。下面是 std::set 的一些常用成员函数:
1. 构造函数:
- `set()`:默认构造函数,创建一个空的 set。
- `set(InputIterator first, InputIterator last)`:使用指定范围内的元素创建 set。
2. 迭代器相关:
- `begin()`:返回指向第一个元素的迭代器。
- `end()`:返回指向最后一个元素之后位置的迭代器。
- `rbegin()`:返回指向最后一个元素的反向迭代器。
- `rend()`:返回指向第一个元素之前位置的反向迭代器。
3. 容量相关:
- `empty()`:判断 set 是否为空,如果为空则返回 true,否则返回 false。
- `size()`:返回 set 中元素的个数。
- `max_size()`:返回 set 可以容纳的最大元素数量。
4. 插入和删除操作:
- `insert(const value_type& val)`:在 set 中插入一个元素。
- `erase(iterator position)`:删除指定位置的元素。
- `erase(const value_type& val)`:删除指定值的元素。
- `clear()`:清空 set 中的所有元素。
5. 查找和计数操作:
- `find(const value_type& val)`:查找指定值的元素,并返回其迭代器。如果未找到,则返回 set 的末尾迭代器。
- `count(const value_type& val)`:返回 set 中等于指定值的元素个数。
6. 其他操作:
- `swap(set& x)`:交换两个 set 容器的内容。
以上只是 std::set 的一部分成员函数,还有其他一些成员函数可供使用。如果你需要了解更多详细信息,建议查阅 C++ STL 的官方文档或相关教程。