Menu
Coddy logo textTech

Создание словаря

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 24 из 56.

Теперь, когда вы понимаете, что такое map, давайте узнаем, как создать его и добавить в него пары ключ-значение. При объявлении std::map необходимо указать и тип ключа, и тип значения, используя угловые скобки.

Вот базовый синтаксис для создания map:

std::map<KeyType, ValueType> mapName;

Например, чтобы создать map, который хранит имена students в качестве ключей, а их результаты тестов — в качестве значений:

std::map<std::string, int> studentScores;

Чтобы добавить элементы в вашу map, можно использовать нотацию с квадратными скобками и ключом, а затем присвоить значение:

studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;

Это создаёт три пары ключ-значение в map. Имя каждого student служит ключом, который позволяет быстро получить соответствующий score.

Чтобы перебрать все элементы в map, можно использовать цикл range-based for loop с auto. Каждый элемент в std::map представляет собой пару ключ–значение, и получить доступ к ключу можно с помощью .first, а к значению — с помощью .second:

for (const auto& pair : studentScores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Здесь auto автоматически определяет тип каждого элемента (пары ключ-значение), pair.first предоставляет ключ (имя student), а pair.second предоставляет значение (оценку). Обратите внимание, что std::map автоматически хранит свои элементы отсортированными по ключу, поэтому перебор map выведет записи в алфавитном порядке.

challenge icon

Задание

Легко

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

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

  • Целое число n, представляющее количество students
  • Затем n пар входных данных:
    • Строка, представляющая имя student
    • Целое число, представляющее score student

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

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

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

Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]

Students должны выводиться в порядке, в котором они появляются при переборе map (это будет алфавитный порядок, поскольку map автоматически сортирует по ключу). Используйте range-based for loop для перебора map, обращаясь к каждой паре ключ-значение и выводя имя student, за которым следует его score.

Попробуйте сами

#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: Используйте range-based for loop для вывода оценки каждого студента
    
    
    // Вывести общее количество студентов
    cout << "Total students: " << grades.size() << endl;
    
    return 0;
}
quiz iconПроверьте себя

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

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

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