Menu
Coddy logo textTech

Итерация по множеству

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 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.

Эта упорядоченная итерация делает множества идеальными для отображения данных в алфавитном или числовом порядке без необходимости ручной сортировки. Работаете ли вы с числами, строками или другими сопоставимыми типами, множество всегда будет представлять их в их естественной отсортированной последовательности.

challenge icon

Задание

Легко

Создайте программу, которая демонстрирует функцию автоматической сортировки std::set, добавляя слова в набор, а затем перебирая их для отображения в алфавитном порядке. Эта задача проверит ваше понимание циклов for на основе диапазона (range-based for loops) с наборами и того, как наборы поддерживают отсортированный порядок.

Будут предоставлены следующие входные данные:

  • Целое число n, представляющее количество слов для добавления в набор
  • Затем n строк, представляющих слова, которые необходимо вставить в набор

Ваша программа должна:

  1. Создать пустой std::set<std::string>
  2. Считать количество добавляемых слов
  3. Использовать цикл для чтения каждого слова и вставки его в набор с помощью метода .insert()
  4. Использовать цикл for на основе диапазона для итерации по набору и вывода каждого слова
  5. После вывода всех слов отобразить общее количество уникальных слов в наборе

Используйте следующий точный формат вывода:

Для каждого слова в наборе (в алфавитном порядке):

[word]

Итоговая сводка в конце:

Total unique words: [count]

Используйте цикл for на основе диапазона с синтаксисом for (const std::string& word : wordSet) для итерации по всем элементам набора. Набор автоматически представит слова в алфавитном порядке, демонстрируя одно из ключевых преимуществ использования std::set. Помните, что если во входных данных будут предоставлены дубликаты слов, они будут автоматически проигнорированы набором, поэтому будут отображены только уникальные слова.

Шпаргалка

Используйте цикл for на основе диапазона (range-based for loop) для итерации по всем элементам множества (set):

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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком