std::set 删除元素
时间: 2023-10-23 12:08:41 浏览: 146
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::set删除元素
`std::set`是C++标准库中的一个关联容器,它存储的是唯一的、自动排序的元素。当你想要从`std::set`中删除元素时,有两个主要的方法:
1. **`erase`成员函数**:这是最常用的删除操作,接受一个迭代器或者一个范围(例如两个迭代器),表示要删除的元素。例如,如果你有一个整数元素`my_set`,你可以这样做:
```cpp
my_set.erase(key); // 删除键值为key的元素
```
2. **`erase`和`find`配合使用**:如果你想删除某个特定的元素,可以先使用`find`查找该元素,然后调用`erase`:
```cpp
auto it = my_set.find(target_value);
if (it != my_set.end()) {
my_set.erase(it);
}
```
这里`it`是一个指向要删除元素的迭代器,如果元素存在,`find`会返回`end()`之前的位置。
注意,由于`std::set`不允许有重复的元素,所以尝试删除不存在的元素不会有任何影响。同时,因为集合内部的元素顺序是由其比较运算符决定的,删除元素后集合可能会重新排序。
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及其后面的所有元素
```