セットの反復処理
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 39/56。
セットの要素の追加、確認、削除ができるようになったので、次はセット内のすべての要素を反復処理する方法を学びましょう。範囲ベースの for ループ(range-based for loop)を使用すると、各要素を最も簡潔に走査できます。
セットを反復処理する方法は次のとおりです:
std::set<std::string> fruits = {"banana", "apple", "cherry"};
for (const std::string& fruit : fruits) {
std::cout << fruit << std::endl;
}最も重要な特徴は、セットが自動的にソートされた順序を維持することです。上記の fruits セットを反復処理すると、出力は挿入した順序ではなく、"apple"、"banana"、"cherry" になります。この自動ソートは、std::set を使用する主な利点の1つです。
このソートされたイテレーションにより、手動でソートすることなく、データをアルファベット順や数値順に表示するのにセットは最適です。数値、文字列、またはその他の比較可能な型を扱っている場合でも、セットは常にそれらを自然なソート順で提示します。
チャレンジ
簡単std::setに単語を追加し、それらを反復処理してアルファベット順に表示することで、std::setの自動ソート機能を実演するプログラムを作成してください。このチャレンジでは、セットを用いた範囲ベースのforループの理解と、セットがどのようにソートされた順序を維持するかをテストします。
以下の入力が提供されます:
- セットに追加する単語の数を示す整数
n - 次に、セットに挿入される単語を表す
n個の文字列
プログラムは以下の手順で行ってください:
- 空の
std::set<std::string>を作成する - 追加する単語の数を読み込む
- ループを使用して各単語を読み込み、
.insert()メソッドを使用してセットに挿入する - 範囲ベースのforループを使用してセットを反復処理し、各単語を出力する
- すべての単語を出力した後、セット内のユニークな単語の総数を表示する
以下の正確な出力形式を使用してください:
セット内の各単語について(アルファベット順):
[word]最後にサマリーを表示:
Total unique words: [count]セット内のすべての要素を反復処理するには、for (const std::string& word : wordSet) という構文の範囲ベースのforループを使用してください。セットは自動的に単語をアルファベット順に提示し、std::set を使用する主な利点の1つを示します。入力に重複した単語が含まれている場合、それらはセットによって自動的に無視されるため、ユニークな単語のみが表示されることに注意してください。
チートシート
範囲ベースの for ループを使用して、セット内のすべての要素を反復処理します:
std::set<std::string> fruits = {"banana", "apple", "cherry"};
for (const std::string& fruit : fruits) {
std::cout << fruit << std::endl;
}セットは反復処理中に自動的にソートされた順序を維持します。要素は挿入順ではなく、自然なソート順(文字列の場合はアルファベット順、数値の場合は数値順)で表示されます。
自分で試してみよう
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
// 単語の数を読み込む
int n;
cin >> n;
// 単語を格納するための空のセットを作成する
set<string> wordSet;
// TODO: ここにコードを記述してください
// n個の単語を読み込み、セットに挿入します
// 範囲ベースのforループを使用してセットを反復処理し、各単語を出力します
// ユニークな単語の総数を出力します
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。