Создание отображения
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 24 из 56.
Теперь, когда вы понимаете, что такое map, давайте узнаем, как создать его и добавить в него пары «ключ-значение». При объявлении std::map нужно указать тип ключа и тип значения с помощью угловых скобок.
Вот базовый синтаксис создания ассоциативного массива:
std::map<KeyType, ValueType> mapName;Например, чтобы создать карту, в которой имена студентов хранятся в качестве ключей, а результаты их тестов — в качестве значений:
std::map<std::string, int> studentScores;Чтобы добавить элементы в карту, можно использовать запись с квадратными скобками и ключом, а затем присвоить значение:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;Это создаёт в отображении три пары «ключ — значение». Имя каждого ученика служит ключом, который позволяет быстро получить соответствующий ему балл.
Чтобы перебрать все элементы в карте, можно использовать цикл for на основе диапазона с auto. Каждый элемент std::map — это пара «ключ-значение»; ключ можно получить с помощью .first, а значение — с помощью .second:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Здесь auto автоматически определяет тип каждого элемента (пары ключ-значение), pair.first возвращает ключ (имя ученика), а pair.second возвращает значение (оценку). Обратите внимание: std::map автоматически сортирует элементы по ключу, поэтому при переборе map записи будут выводиться в алфавитном порядке.
Задание
ЛегкоСоздай программу, которая создаёт систему учёта оценок студентов с помощью std::map. Программа будет хранить имена студентов в качестве ключей, а результаты их тестов — в качестве значений.
Будут предоставлены следующие входные данные:
- Целое число
n, обозначающее количество студентов - Затем
nпар входных данных:- Строка с именем студента
- Целое число, обозначающее результат студента
Твоя программа должна:
- Создать
std::map<std::string, int>с именемgrades - Считать количество студентов
- Для каждого студента считать его имя и результат, а затем добавить их в карту с помощью квадратных скобок
- После добавления всех студентов вывести информацию о каждом студенте в формате, показанном ниже
- Вычислить и вывести общее количество студентов, хранящихся в карте
Используй следующий точный формат вывода:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]Студенты должны выводиться в том порядке, в котором они появляются при переборе карты (в алфавитном порядке, поскольку карты автоматически сортируют элементы по ключу). Используй цикл for на основе диапазона для перебора карты, доступа к каждой паре «ключ—значение» и вывода имени студента, за которым следует его результат.
Попробуйте сами
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Считайте количество студентов
int n;
cin >> n;
// Создайте map для хранения оценок
map<string, int> grades;
// TODO: Напишите здесь свой код
// Считайте имя и балл каждого студента, затем добавьте их в map
// Выведите результаты
cout << "Student Grades:" << endl;
// TODO: Используйте цикл for по диапазону, чтобы вывести оценку каждого студента
// Выведите общее количество студентов
cout << "Total students: " << grades.size() << endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор получения адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память с помощью 'new'Освобождение памяти с помощью 'delete'Повторение — практика с указателями4Отображения (пары ключ—значение)
Знакомство с std::mapСоздание отображенияДоступ к значениям и их изменениеПроверка наличия ключейУдаление парПеребор отображенияПовторение — частотность слов2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с циклом forЦикл for на основе диапазонаУдаление элементовПовторение: операции с векторами5Проект: инструмент учёта запасов
Настройка проектаДобавление и обновление товаров3Проект: инструмент для списка задач
Обзор проектаДобавление задачиПотренируйтесь самостоятельно: Онлайн-компилятор C++