この投稿では、次の方法について説明します。
 
1.C++のセットから1つの要素を削除します。
2.述語を満たすC++のセットから条件付きで要素を削除します。

1.1つの要素を削除する

セットコンテナから単一の要素を削除することは、C++では非常に簡単です。アイデアは、与えられた要素をに渡すことです set::erase セットからそれを消去する関数。

ダウンロード  コードを実行する

出力:

c b a

2.述語を満たすすべての要素を削除します

述語を満たすセットから条件付きで要素を削除することもできます。アイデアは、イテレータを使用してセットを反復し、 unordered_set::erase 現在の要素が条件に一致する場合に機能します。を呼び出すことに注意してください erase() 反復中の関数はイテレータを無効にするため、特別な注意が必要です。これはいくつかの方法で処理できます。

 
1.で C++11 以上、 erase() 次の要素またはにイテレータを返します unordered_set::end 最後の要素が削除された場合。アイデアはの戻り値を使用することです erase() 以下に示すように、イテレータを次の要素に設定します。

ダウンロード  コードを実行する

出力:

c b

 
2.で C++98/03, erase() 次の要素にイテレータを返しません。回避策は、イテレータがに渡された後にイテレータをインクリメントすることです erase() しかし前に erase() 実行されます。これにより、イテレータのコピーが erase() 関数であり、イテレータは以前にすでにインクリメントされているため、無効化されません erase() と呼ばれます。

ダウンロード  コードを実行する

出力:

c b

 
3.別の良い代替手段は、 erase() イテレータを次の要素に進めた後、現在のイテレータの複製で機能します。これは、イテレータの暗黙的なコピーが関数に渡される前のアプローチとまったく同じように機能します。

ダウンロード  コードを実行する

出力:

c b

 
4.別の解決策は、セットを反復して構築することです 「削除されるリスト」 述語を満たす要素へのイテレータの数。次に、そのリストをループして呼び出します set::erase 各イテレータで。

ダウンロード  コードを実行する

出力:

c b

これで、C++のセットから要素を削除できます。