Menu
CoddyTech

Создание отображения

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

challenge icon

Задание

Легко

Создай программу, которая создаёт систему учёта оценок студентов с помощью std::map. Программа будет хранить имена студентов в качестве ключей, а результаты их тестов — в качестве значений.

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

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

Твоя программа должна:

  1. Создать std::map<std::string, int> с именем grades
  2. Считать количество студентов
  3. Для каждого студента считать его имя и результат, а затем добавить их в карту с помощью квадратных скобок
  4. После добавления всех студентов вывести информацию о каждом студенте в формате, показанном ниже
  5. Вычислить и вывести общее количество студентов, хранящихся в карте

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

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор C++