Skip to content

Commit

Permalink
map / setのerase : オーバーロード仕様が古くなっていたのを修正
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Jun 22, 2023
1 parent ae7c515 commit 6251e4a
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 57 deletions.
41 changes: 28 additions & 13 deletions reference/map/map/erase.md
Expand Up @@ -5,13 +5,18 @@
* function[meta id-type]

```cpp
void erase(iterator position); // (1) C++03
iterator erase(const_iterator position); // (1) C++11
void erase(iterator position); // (1) C++03 (C++11で一旦削除)
iterator erase(iterator position); // (1) C++17

size_type erase(const key_type& x); // (2)
iterator erase(const_iterator position); // (2) C++11

void erase(iterator first, iterator last); // (3) C++03
iterator erase(const_iterator first, const_iterator last); // (3) C++11
size_type erase(const key_type& x); // (3) C++03

template <class K>
size_type erase(K&& x); // (4) C++23

void erase(iterator first, iterator last); // (5) C++03
iterator erase(const_iterator first, const_iterator last); // (5) C++11
```
## 概要
Expand All @@ -20,8 +25,10 @@ iterator erase(const_iterator first, const_iterator last); // (3) C++11
これは削除された要素の数だけコンテナの `size` を減らし、それぞれの要素のデストラクタを呼び出す。
- (1) : 指定されたイテレータが指す要素を削除する
- (2) : 指定されたキーをもつ要素を削除する
- (3) : 指定されたイテレータ範囲の要素をすべて削除する
- (2) : 指定された読み取り専用イテレータが指す要素を削除する
- (3) : 指定されたキーをもつ要素を削除する
- (4) : `key_type`と比較可能な`K`型のキーを受け取って要素を削除する
- (5) : 指定されたイテレータ範囲の要素をすべて削除する
## パラメータ
Expand All @@ -31,16 +38,20 @@ iterator erase(const_iterator first, const_iterator last); // (3) C++11
## 戻り値
- (1), (3)
- (1) :
- C++03 : 戻り値なし
- C++17 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3), (4) : 削除された要素の数を返す
- (5) :
- C++03 : 戻り値なし
- C++11 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) 削除された要素の数を返す。
## 計算量
- (1) 定数時間
- (2) コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (3) コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
- (1), (2) : 定数時間
- (3), (4) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (5) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
## 備考
Expand Down Expand Up @@ -174,7 +185,11 @@ int main()

## 参照
- [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf)
- C++11で、`erase(iterator)``erase(const_iterator)`に変更
- [LWG Issue 2258. `a.erase(q1, q2)` unable to directly return `q2`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2258)
- C++11では、「`a.erase(q1, q2)`の結果として`q2`が返る」という仕様だったが、`const_iterator`型が渡された場合に`iterator`型を返せない問題があった。そのためC++14では、`q2`が指す要素を指すイテレータが返る、ということが明記された

- [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059)
- C++17で、`erase(iterator)`を再追加
- [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html)
- C++23で、`template <class K> erase(K&& x)`のオーバーロードが追加された

43 changes: 28 additions & 15 deletions reference/map/multimap/erase.md
Expand Up @@ -5,13 +5,18 @@
* function[meta id-type]

```cpp
void erase(iterator position); // (1) C++03
iterator erase(const_iterator position); // (1) C++11
void erase(iterator position); // (1) C++03 (C++11で一旦削除)
iterator erase(iterator position); // (1) C++17

size_type erase(const key_type& x); // (2)
iterator erase(const_iterator position); // (2) C++11

void erase(iterator first, iterator last); // (3) C++03
iterator erase(const_iterator first, const_iterator last); // (3) C++11
size_type erase(const key_type& x); // (3) C++03

template <class K>
size_type erase(K&& x); // (4) C++23

void erase(iterator first, iterator last); // (5) C++03
iterator erase(const_iterator first, const_iterator last); // (5) C++11
```
Expand All @@ -21,9 +26,10 @@ iterator erase(const_iterator first, const_iterator last); // (3) C++11
これは削除された要素の数だけコンテナの `size` を減らし、それぞれの要素のデストラクタを呼び出す。
- (1) : 指定されたイテレータが指す要素を削除する
- (2) : 指定されたキーをもつ要素をすべて削除する
- (3) : 指定されたイテレータ範囲の要素をすべて削除する
- (2) : 指定された読み取り専用イテレータが指す要素を削除する
- (3) : 指定されたキーをもつ要素をすべて削除する
- (4) : `key_type`と比較可能な`K`型のキーを受け取って要素をすべて削除する
- (5) : 指定されたイテレータ範囲の要素をすべて削除する
## パラメータ
- `position` : `multimap` から削除する単一要素を指すイテレータ。`iterator` はメンバ型であり、双方向イテレータとして定義される。
Expand All @@ -32,16 +38,20 @@ iterator erase(const_iterator first, const_iterator last); // (3) C++11
## 戻り値
- (1), (3)
- (1) :
- C++03 : 戻り値なし
- C++17 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3), (4) : 削除された要素の数を返す
- (5) :
- C++03 : 戻り値なし
- C++11 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) 削除された要素の数を返す。
## 計算量
- (1) 定数時間
- (2) コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (3) コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
- (1), (2) : 定数時間
- (3), (4) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (5) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
## 備考
Expand Down Expand Up @@ -164,7 +174,10 @@ int main()

## 参照
- [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf)
- C++11で、`erase(iterator)``erase(const_iterator)`に変更
- [LWG Issue 2258. `a.erase(q1, q2)` unable to directly return `q2`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2258)
- C++11では、「`a.erase(q1, q2)`の結果として`q2`が返る」という仕様だったが、`const_iterator`型が渡された場合に`iterator`型を返せない問題があった。そのためC++14では、`q2`が指す要素を指すイテレータが返る、ということが明記された


- [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059)
- C++17で、`erase(iterator)`を再追加
- [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html)
- C++23で、`template <class K> erase(K&& x)`のオーバーロードが追加された
44 changes: 29 additions & 15 deletions reference/set/multiset/erase.md
Expand Up @@ -5,13 +5,18 @@
* function[meta id-type]

```cpp
void erase(iterator position); // (1) C++03 まで
iterator erase(const_iterator position); // (1) C++11 から
void erase(iterator position); // (1) C++03 (C++11で一旦削除)
iterator erase(iterator position); // (1) C++17

void erase(iterator first, iterator last); // (2) C++03 まで
iterator erase(const_iterator first, const_iterator last); // (2) C++11 から
iterator erase(const_iterator position); // (2) C++11

size_type erase(const key_type& x); // (3)
size_type erase(const key_type& x); // (3) C++03

template <class K>
size_type erase(K&& x); // (4) C++23

void erase(iterator first, iterator last); // (5) C++03
iterator erase(const_iterator first, const_iterator last); // (5) C++11
```
Expand All @@ -20,8 +25,10 @@ size_type erase(const key_type& x); // (3)
これは削除された要素の数だけコンテナの [`size`](size.md)`()` を減らし、それぞれの要素のデストラクタを呼び出す。
- (1) : 指定されたイテレータが指す要素を削除する
- (2) : 指定されたキーをもつ要素をすべて削除する
- (3) : 指定されたイテレータ範囲の要素をすべて削除する
- (2) : 指定された読み取り専用イテレータが指す要素を削除する
- (3) : 指定されたキーをもつ要素をすべて削除する
- (4) : `key_type`と比較可能な`K`型のキーを受け取って要素をすべて削除する
- (5) : 指定されたイテレータ範囲の要素をすべて削除する
## パラメータ
Expand All @@ -31,16 +38,20 @@ size_type erase(const key_type& x); // (3)
## 戻り値
- (1), (2) :
- C++03 まで : なし
- (1) :
- C++03 : 戻り値なし
- C++17 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3), (4) : 削除された要素の数を返す
- (5) :
- C++03 : 戻り値なし
- C++11 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3) : 削除された要素の数を返す。
## 計算量
- (1) : 定数時間
- (2) : コンテナの [`size()`](size.md) についての対数時間と、それに加えて `first` と `last` の間の距離に対する線形時間。
- (3) : コンテナの [`size()`](size.md) についての対数時間と、それに加えて `x` と等価なキーの要素数に対する線形時間。
- (1), (2) : 定数時間
- (3), (4) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (5) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
## 備考
Expand Down Expand Up @@ -157,7 +168,10 @@ int main()

## 参照
- [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf)
- C++11で、`erase(iterator)``erase(const_iterator)`に変更
- [LWG Issue 2258. `a.erase(q1, q2)` unable to directly return `q2`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2258)
- C++11では、「`a.erase(q1, q2)`の結果として`q2`が返る」という仕様だったが、`const_iterator`型が渡された場合に`iterator`型を返せない問題があった。そのためC++14では、`q2`が指す要素を指すイテレータが返る、ということが明記された


- [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059)
- C++17で、`erase(iterator)`を再追加
- [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html)
- C++23で、`template <class K> erase(K&& x)`のオーバーロードが追加された
43 changes: 29 additions & 14 deletions reference/set/set/erase.md
Expand Up @@ -5,13 +5,18 @@
* function[meta id-type]

```cpp
void erase(iterator position); // (1) C++03 まで
iterator erase(const_iterator position); // (1) C++11 から
void erase(iterator position); // (1) C++03 (C++11で一旦削除)
iterator erase(iterator position); // (1) C++17

void erase(iterator first, iterator last); // (2) C++03 まで
iterator erase(const_iterator first, const_iterator last); // (2) C++11 から
iterator erase(const_iterator position); // (2) C++11

size_type erase(const key_type& x); // (3)
size_type erase(const key_type& x); // (3) C++03

template <class K>
size_type erase(K&& x); // (4) C++23

void erase(iterator first, iterator last); // (5) C++03
iterator erase(const_iterator first, const_iterator last); // (5) C++11
```
Expand All @@ -20,8 +25,10 @@ size_type erase(const key_type& x); // (3)
これは削除された要素の数だけコンテナの [`size`](size.md)`()` を減らし、それぞれの要素のデストラクタを呼び出す。
- (1) : 指定されたイテレータが指す要素を削除する
- (2) : 指定されたキーをもつ要素を削除する
- (3) : 指定されたイテレータ範囲の要素をすべて削除する
- (2) : 指定された読み取り専用イテレータが指す要素を削除する
- (3) : 指定されたキーをもつ要素を削除する
- (4) : `key_type`と比較可能な`K`型のキーを受け取って要素を削除する
- (5) : 指定されたイテレータ範囲の要素をすべて削除する
## パラメータ
Expand All @@ -31,16 +38,20 @@ size_type erase(const key_type& x); // (3)
## 戻り値
- (1), (2) :
- C++03 まで : なし
- (1) :
- C++03 : 戻り値なし
- C++17 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (2) : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3), (4) : 削除された要素の数を返す
- (5) :
- C++03 : 戻り値なし
- C++11 : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、[`end()`](end.md)を返す (要素を削除した結果としてコンテナが空になった場合)
- (3) : 削除された要素の数を返す。
## 計算量
- (1) : 定数時間
- (2) : コンテナの [`size()`](size.md) についての対数時間と、それに加えて `first` と `last` の間の距離に対する線形時間。
- (3) : コンテナの [`size()`](size.md) について対数時間
- (1), (2) : 定数時間
- (3), (4) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間
- (5) : コンテナの [`size()`](/reference/map/map/size.md) について対数時間、それに加えて `first` と `last` の間の距離に対する線形時間
## 備考
Expand Down Expand Up @@ -158,7 +169,11 @@ int main()

## 参照
- [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf)
- C++11で、`erase(iterator)``erase(const_iterator)`に変更
- [LWG Issue 2258. `a.erase(q1, q2)` unable to directly return `q2`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2258)
- C++11では、「`a.erase(q1, q2)`の結果として`q2`が返る」という仕様だったが、`const_iterator`型が渡された場合に`iterator`型を返せない問題があった。そのためC++14では、`q2`が指す要素を指すイテレータが返る、ということが明記された

- [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059)
- C++17で、`erase(iterator)`を再追加
- [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html)
- C++23で、`template <class K> erase(K&& x)`のオーバーロードが追加された

0 comments on commit 6251e4a

Please sign in to comment.