std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::erase - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
(1) | (C++11以上) |
|
|
(2) | (C++11以上) |
|
|
(3) | (C++11以上) |
コンテナから指定された要素を削除します。
1) pos の指す要素を削除します。
2) 範囲 [first; last) 内の要素を削除します。 *this 内の有効な範囲でなければなりません。
3) key と同等なキーを持つ要素 (もしあれば)を削除します。
削除された要素への参照およびイテレータは無効化されます。 それ以外のイテレータおよび参照は無効化されません。
イテレータ pos は有効かつ逆参照可能でなければなりません。 そのため end() イテレータは (有効であるが逆参照可能でないため) pos の値として使用することはできません。
|
削除されなかった要素の順序は維持されます (このためコンテナをイテレートしながら個々の要素を削除することが可能となります)。 |
(C++14以上) |
引数
| pos | - | 削除する要素を指すイテレータ |
| first, last | - | 削除する要素の範囲 |
| key | - | 削除する要素のキーの値 |
戻り値
1-2) 削除された最後の要素の次のイテレータ。
3) 削除された要素の数。
例外
1,2) (なし)
3) Compare オブジェクトによって投げられるあらゆる例外
計算量
c を unordered_map のインスタンスとした場合、
1) 平均的なケース: 定数時間、ワーストケース: c.size()
2) 平均的なケース: std::distance(first, last)、ワーストケース: c.size()
3) 平均的なケース: c.count(key)、ワーストケース: c.size()
例
#include <unordered_map> #include <iostream> int main() { std::unordered_map<int, std::string> c = {{1, "one"}, {2, "two"}, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six"}}; // c からすべての奇数を削除します。 for(auto it = c.begin(); it != c.end(); ) { if(it->first % 2 == 1) it = c.erase(it); else ++it; } for(auto& p : c) { std::cout << p.second << ' '; } }
出力例: