要素の削除
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 38/56。
時には、不要になった要素をセットから削除する必要があります。.erase()メソッドを使用すると、値を指定して特定の要素を削除できます。
セットから要素を削除する方法は次のとおりです:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // 要素20を削除します.erase(20) を呼び出した後、セットには {10, 30, 40} だけが含まれるようになります。セット内に存在しない要素を削除しようとしても、何も起こりません。セットは変更されず、エラーも発生しません。
これにより、要素が存在するかどうかが不確かな場合でも .erase() を安全に使用できるようになります。これは、ユーザーの入力やプログラムのロジックに基づいて特定のアイテムを削除する必要がある場合に、クリーンなコレクションを維持するのに特に便利です。
チャレンジ
簡単std::set の .erase() メソッドを使用して要素を削除する方法を示すプログラムを作成してください。このチャレンジでは、セットから特定の要素を安全に削除し、その結果を観察する方法についての理解をテストします。
以下の入力が提供されます:
- セットに最初に追加する要素の数を示す整数
n - セットに挿入される
n個の整数 - 削除する要素の数を示す整数
m - セットから削除する要素を示す
m個の整数
プログラムは以下の手順を実行する必要があります:
- 空の
std::set<int>を作成する - 追加する要素の数を読み取り、
.insert()を使用してそれらをセットに挿入する - すべての挿入が終わった後の初期のセットのサイズを出力する
- 削除する要素の数を読み取る
- 削除する各要素について、
.erase()を使用して削除を試みる - 各削除の試行の後、現在のセットのサイズを出力する
- 最後に、セットに残っている要素を反復処理し、ソートされた順序で出力する
以下の正確な出力形式を使用してください:
初期のセットのサイズ:
Initial size: [size]各削除の試行後:
After removing [number]: size = [current_size]最終的に残った要素:
Remaining elements: [element1] [element2] [element3] ....erase() は、セットに存在しない要素を削除しようとした場合でも安全に処理を行うことに注意してください。その場合、セットは変更されず、エラーも発生しません。残りの要素を出力するには範囲ベースの for ループを使用してください。セットは要素をソートされた順序で保持するため、自動的にソートされた状態で表示されます。
チートシート
.erase() を使用して、値を指定することでセットから特定の要素を削除します:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // 要素 20 を削除しますセットに存在しない要素を削除しようとしても、何も起こりません。セットは変更されず、エラーも発生しないため、.erase() は安全に使用できます。
自分で試してみよう
#include <iostream>
#include <set>
using namespace std;
int main() {
// 追加する要素の数を読み込む
int n;
cin >> n;
// 空のセットを作成する
set<int> mySet;
// n個の要素を読み込んで挿入する
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// 要素をセットに挿入する
}
// 削除する要素の数を読み込む
int m;
cin >> m;
// TODO: 以下にコードを記述してください
// 1. セットの初期サイズを出力する
// 2. 削除する各要素について、.erase() を使用し、削除後のサイズを都度出力する
// 3. セットに残っている要素を出力する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。