Menu
Coddy logo textTech

セットの反復処理

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つです。

このソートされたイテレーションにより、手動でソートすることなく、データをアルファベット順や数値順に表示するのにセットは最適です。数値、文字列、またはその他の比較可能な型を扱っている場合でも、セットは常にそれらを自然なソート順で提示します。

challenge icon

チャレンジ

簡単

std::setに単語を追加し、それらを反復処理してアルファベット順に表示することで、std::setの自動ソート機能を実演するプログラムを作成してください。このチャレンジでは、セットを用いた範囲ベースのforループの理解と、セットがどのようにソートされた順序を維持するかをテストします。

以下の入力が提供されます:

  • セットに追加する単語の数を示す整数 n
  • 次に、セットに挿入される単語を表す n 個の文字列

プログラムは以下の手順で行ってください:

  1. 空の std::set<std::string> を作成する
  2. 追加する単語の数を読み込む
  3. ループを使用して各単語を読み込み、.insert() メソッドを使用してセットに挿入する
  4. 範囲ベースのforループを使用してセットを反復処理し、各単語を出力する
  5. すべての単語を出力した後、セット内のユニークな単語の総数を表示する

以下の正確な出力形式を使用してください:

セット内の各単語について(アルファベット順):

[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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン