请给我std::set的所有成员函数和用法
时间: 2024-04-20 11:25:05 浏览: 64
std::set 是 C++ STL 中的一个容器,它实现了一个有序、不重复的集合。下面是 std::set 的一些常用成员函数和用法:
1. 插入元素:
- insert(val):将 val 插入到 set 中。
- insert(first, last):将区间 [first, last) 中的元素插入到 set 中。
2. 删除元素:
- erase(val):删除 set 中值为 val 的元素。
- erase(iterator):删除迭代器指向的元素。
- erase(first, last):删除区间 [first, last) 中的元素。
3. 查找元素:
- find(val):返回指向值为 val 的元素的迭代器,如果不存在则返回 end()。
- count(val):返回 set 中值为 val 的元素的个数,要么是 0 个(不存在),要么是 1 个(存在)。
4. 容量相关:
- size():返回 set 中元素的个数。
- empty():判断 set 是否为空。
- max_size():返回 set 支持存储的最大元素个数。
5. 遍历元素:
- begin() 和 end():返回指向首元素和尾后元素的迭代器,可以用于遍历 set 中的所有元素。
6. 其他常用操作:
- clear():清空 set 中的所有元素。
- swap(other_set):交换当前 set 和另一个 set 的内容。
使用 std::set 需要
相关问题
std::set::lower_bound
std::set::lower_bound是C++标准库中std::set容器的成员函数之一,用于查找集合中第一个大于或等于给定值的元素的迭代器。
具体来说,lower_bound函数接受一个参数,即要查找的值,然后返回一个指向集合中第一个大于或等于该值的元素的迭代器。如果不存在这样的元素,则返回指向集合中最后一个元素的迭代器。
下面是std::set::lower_bound函数的用法示例:
```cpp
#include <iostream>
#include <set>
int main() {
std::set<int> mySet = {10, 20, 30, 40, 50};
auto it = mySet.lower_bound(25);
if (it != mySet.end()) {
std::cout << "Lower bound of 25: " << *it << std::endl;
} else {
std::cout << "No lower bound found for 25" << std::endl;
}
it = mySet.lower_bound(35);
if (it != mySet.end()) {
std::cout << "Lower bound of 35: " << *it << std::endl;
} else {
std::cout << "No lower bound found for 35" << std::endl;
}
return 0;
}
```
输出结果为:
```
Lower bound of 25: 30
Lower bound of 35: 40
```
std::unordered_set如何删除元素
std::unordered_set是C++标准库中的一个容器,它是一个无序的集合,其中的元素是唯一的。要删除std::unordered_set中的元素,可以使用成员函数erase()。
erase()函数有多种用法,可以根据需要选择适合的方式来删除元素。以下是几种常见的用法:
1. 删除指定元素:
可以使用erase()函数来删除指定的元素。需要传入要删除的元素作为参数。如果元素存在于集合中,则会被删除;如果不存在,则不会有任何影响。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
mySet.erase(3); // 删除元素3
```
2. 删除满足条件的元素:
可以使用erase()函数结合lambda表达式来删除满足特定条件的元素。lambda表达式可以用于指定删除条件。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
mySet.erase(std::remove_if(mySet.begin(), mySet.end(), [](int num) { return num % 2 == 0; }), mySet.end()); // 删除所有偶数
```
3. 删除一定范围内的元素:
可以使用erase()函数结合迭代器来删除指定范围内的元素。需要传入要删除的起始迭代器和终止迭代器作为参数。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
auto it = mySet.find(2); // 找到元素2的迭代器
mySet.erase(it, mySet.end()); // 删除元素2及其后面的所有元素
```
阅读全文