std::set 删除元素
时间: 2023-10-23 19:08:41 浏览: 65
std::set是一个关联容器,其中元素是按照特定顺序排列的。它的元素是唯一的,并且不能被修改。因此,如果想要删除set中的元素,需要使用erase()函数。
erase()函数有多个重载版本,其中最常用的版本接受一个迭代器参数,该参数指向要删除的元素。这个函数将返回一个迭代器,该迭代器指向删除元素之后的位置。
下面是一个示例代码,演示了如何使用std::set删除元素:
```c++
#include <set>
#include <iostream>
int main() {
std::set<int> myset {1, 2, 3, 4, 5};
// 删除元素3
myset.erase(3);
for (auto it = myset.begin(); it != myset.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
```
输出:
```
1 2 4 5
```
相关问题
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及其后面的所有元素
```
std::unordered_set 详解
std::unordered_set是C++ STL中的一个关联容器,它是一个无序的集合,其中的元素没有按照特定的顺序进行排列。std::unordered_set可以存储各种类型的元素,并且每个元素都是唯一的。它的内部实现是使用哈希表来存储元素,因此可以通过键值直接快速访问各个元素。
使用std::unordered_set时,需要提供一个哈希函数,用于计算元素的哈希值。默认情况下,std::unordered_set使用std::hash作为哈希函数,但也可以自定义哈希函数。同时,还需要提供一个相等比较函数,用于比较两个元素是否相等,默认情况下,std::unordered_set使用std::equal_to进行相等比较。
std::unordered_set提供了以下成员函数:
- insert:向集合中插入一个元素。
- erase:从集合中删除一个元素。
- size:返回集合中元素的个数。
- empty:判断集合是否为空。
- find:查找集合中是否存在某个元素。
- clear:清空集合中的所有元素。
使用std::unordered_set时,需要包含头文件<unordered_set>。