Итерация по множеству
Часть раздела Логика и управление потоком путешествия по 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.
Эта упорядоченная итерация делает множества идеальными для отображения данных в алфавитном или числовом порядке без необходимости ручной сортировки. Работаете ли вы с числами, строками или другими сопоставимыми типами, множество всегда будет представлять их в их естественной отсортированной последовательности.
Задание
ЛегкоСоздайте программу, которая демонстрирует функцию автоматической сортировки std::set, добавляя слова в набор, а затем перебирая их для отображения в алфавитном порядке. Эта задача проверит ваше понимание циклов for на основе диапазона (range-based for loops) с наборами и того, как наборы поддерживают отсортированный порядок.
Будут предоставлены следующие входные данные:
- Целое число
n, представляющее количество слов для добавления в набор - Затем
nстрок, представляющих слова, которые необходимо вставить в набор
Ваша программа должна:
- Создать пустой
std::set<std::string> - Считать количество добавляемых слов
- Использовать цикл для чтения каждого слова и вставки его в набор с помощью метода
.insert() - Использовать цикл for на основе диапазона для итерации по набору и вывода каждого слова
- После вывода всех слов отобразить общее количество уникальных слов в наборе
Используйте следующий точный формат вывода:
Для каждого слова в наборе (в алфавитном порядке):
[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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров3Проект: Список задач
Обзор проектаДобавление задачи6Множества (уникальные элементы)
Введение в std::setСоздание множества и добавление элементовПроверка наличия элементовУдаление элементовИтерация по множествуПовторение: уникальные числа