Skip to content

Commit 814fa32

Browse files
Revise erase() documentation for clarity and detail
Updated the erase() documentation to clarify its functionality and added details about parameters and return values.
1 parent f6a5251 commit 814fa32

File tree

1 file changed

+81
-70
lines changed
  • content/cpp/concepts/unordered-set/terms/erase

1 file changed

+81
-70
lines changed
Lines changed: 81 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,117 @@
11
---
22
Title: 'erase()'
3-
Description: 'removes elements from an unordered set'
4-
Subjects:
5-
- 'Computer Science'
6-
Tags:
7-
- 'Methods'
8-
- 'unordered-sets'
3+
Description: 'Removes one or more specified elements from the unordered_set.'
4+
Subjects:
5+
- 'Computer Science'
6+
- 'Game Development'
7+
Tags:
8+
- 'Methods'
9+
- 'Sets'
910
CatalogContent:
10-
- 'learn-C++'
11-
- 'paths/computer-science'
11+
- 'learn-c-plus-plus'
12+
- 'paths/computer-science'
1213
---
1314

14-
# 'C++ Unordered-sets: erase()'
15-
16-
The 'erase()' function removes elements from an unordered set.
17-
It can erase a single element by key, a single element by iterator, or a range of elements using two iterators.
18-
Only iterators pointing to erased elements are invalidated; all others remain valid.
15+
The **`erase()`** function removes elements from an `unordered_set`. It can erase a single element by key, a single element by iterator, or a range of elements using two iterators, and only iterators pointing to erased elements are invalidated while the rest remain valid.
1916

2017
## Syntax
2118

22-
Erase by Key
23-
```
24-
size_t erase(const Key& key);
25-
```
19+
The `erase()` function removes elements from an `unordered_set` in three ways: by key, by iterator, or by a range of iterators:
2620

27-
Erase by Iterator
28-
```
29-
iterator erase(const_iterator pos);
21+
```pseudo
22+
set.erase(key); // erase by key
23+
set.erase(iterator); // erase by iterator
24+
set.erase(first, last); // erase by range
3025
```
3126

32-
Erase a Range of Iterators
33-
```
34-
iterator erase(const_iterator first, const_iterator last);
35-
```
27+
**Parameters:**
28+
29+
- `key`: A value of the set’s key type. All elements matching this key are removed (at most one since `unordered_set` stores unique keys).
30+
- `iterator`: An iterator pointing to the element to remove.
31+
- `first`, `last`: A pair of iterators defining the range to erase. Removes all elements in `[first, last)`.
3632

37-
Erase by Key: Removes all elements matching `key` (in an `unordered_set`, that's at most one). Returns the number of elements removed.
33+
**Return value:**
3834

39-
Erase by Iterator: Removes the element at `pos`. Returns an iterator to the element that followed the erased one.
35+
- When erasing by key: returns the number of elements removed, as a `size_type`.
36+
- When erasing by iterator: returns an iterator pointing to the element that follows the erased one.
37+
- When erasing by range: returns an iterator pointing to the element that follows the last erased element.
4038

41-
Erase a Range of Iterators: Removes all elements in the half-open range `[first, last]`. Returns an iterator to the element that followed the last removed one.
39+
## Example 1: Erasing by key, iterator, and range
4240

43-
## Example
41+
In this example the program removes elements using all three `erase()` overloads and prints the remaining contents of the `unordered_set`:
4442

4543
```cpp
4644
#include <iostream>
4745
#include <unordered_set>
4846

4947
int main() {
50-
std::unordered_set<int> numbers = {1, 2, 3, 4, 5};
48+
std::unordered_set<int> numbers = {1, 2, 3, 4, 5};
5149

52-
// Erase by key
53-
numbers.erase(3);
50+
// Erase by key
51+
numbers.erase(3);
5452

55-
// Erase by iterator
56-
auto it = numbers.find(4);
57-
if (it != numbers.end()) {
58-
numbers.erase(it);
59-
}
53+
// Erase by iterator
54+
auto it = numbers.find(4);
55+
if (it != numbers.end()) {
56+
numbers.erase(it);
57+
}
6058

61-
// Erase using a range
62-
auto first = numbers.begin();
63-
auto last = numbers.find(5);
64-
numbers.erase(first, last);
59+
// Erase using a range
60+
auto first = numbers.begin();
61+
auto last = numbers.find(5);
62+
numbers.erase(first, last);
6563

66-
for (int n : numbers) {
67-
std::cout << n << " "; // expected output: 5
68-
}
64+
for (int n : numbers) {
65+
std::cout << n << " ";
66+
}
67+
68+
return 0;
6969
}
7070
```
71-
## Codebyte
72-
73-
The following example creates an `unordered_set<int>`, then demonstrates all three `erase()` overloads:
74-
* Erasing by key
75-
* Erasing by iterators
76-
* Erasing by iterator range
7771

78-
```codebyte/cpp
79-
#include <iostream>
80-
#include <unordered_set>
72+
The output of this code is:
8173

82-
int main() {
83-
std::unordered_set<int> s = {1, 2, 3, 4, 5};
74+
```shell
75+
5 2 1
76+
```
8477

85-
// 1. Erase by key
86-
s.erase(3);
87-
// set is now {1, 2, 4, 5}
78+
> **Note:** The order and even the elements removed by a range erase depend on the internal bucket ordering of the `unordered_set`, which is not guaranteed. The final printed sequence may vary across systems.
8879
89-
// 2. Erase by iterator
90-
auto it = s.find(4);
91-
if (it != s.end()) {
92-
s.erase(it);
93-
}
94-
// set is now {1, 2, 5}
80+
## Codebyte Example
9581

96-
// 3. Erase by iterator range
97-
auto first = s.begin();
98-
auto last = s.end();
99-
// this removes everything in the set
100-
s.erase(first, last);
82+
In this example the program demonstrates each `erase()` form and prints the set contents after every removal step:
10183

102-
// set is now empty
84+
```codebyte/cpp
85+
#include <iostream>
86+
#include <unordered_set>
10387
104-
return 0;
88+
int main() {
89+
std::unordered_set<int> s = {1, 2, 3, 4, 5};
90+
91+
// 1. Erase by key
92+
s.erase(3);
93+
std::cout << "After erasing 3: ";
94+
for (int v : s) std::cout << v << " ";
95+
std::cout << "\n";
96+
97+
// 2. Erase by iterator
98+
auto it = s.find(4);
99+
if (it != s.end()) {
100+
s.erase(it);
101+
}
102+
std::cout << "After erasing iterator to 4: ";
103+
for (int v : s) std::cout << v << " ";
104+
std::cout << "\n";
105+
106+
// 3. Erase by iterator range
107+
auto first = s.begin();
108+
auto last = s.end();
109+
s.erase(first, last);
110+
111+
std::cout << "After erasing full range: ";
112+
for (int v : s) std::cout << v << " ";
113+
std::cout << "(empty)\n";
114+
115+
return 0;
105116
}
106117
```

0 commit comments

Comments
 (0)