Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

std::map в C++: полное руководство с примерами кода

Что такое std::map?

В стандартной библиотеке шаблонов C++ (STL) std::map — ассоциативный контейнер, хранящий элементы как пары ключ-значение. Каждый ключ уникален, и контейнер автоматически поддерживает элементы отсортированными по функции сравнения ключей (по умолчанию std::less). Значения могут быть любого типа и доступны через соответствующие ключи.

Зачем использовать std::map?

Синтаксис

Объявление map:

std::map<KeyType, ValueType> mapName;

Пример:

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

Типы-члены

  • key_type: тип ключей.
  • mapped_type: тип значений.
  • value_type: std::pair<const key_type, mapped_type>
  • iterator: двунаправленный итератор по value_type.
  • const_iterator, reverse_iterator, const_reverse_iterator
  • size_type, difference_type

Встроенные функции

  • begin() — итератор на первый элемент.
  • end() — итератор за последним.
  • size() — число элементов.
  • empty() — пуст ли map.
  • insert() — добавить пару ключ/значение.
  • find() — найти элемент по ключу.
  • erase() — удалить элементы по итератору или ключу.
  • clear() — удалить все элементы.
  • Другие утилиты: count(), lower_bound() и др.

Итерация по элементам map

Итераторы дают полный контроль над порядком обхода, который всегда отсортирован по ключу.

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    cout << "Map size is: " << students.size() << endl;
    cout << endl << "Default map order:" << endl;
    for (auto it = students.begin(); it != students.end(); ++it) {
        cout << it->first << ": " << it->second << endl;
    }
    return 0;
}

Вывод:

std::map в C++: полное руководство с примерами кода

Вставка данных в std::map

Используйте insert() для новых записей; он молча игнорирует дубликаты. Для перезаписи существующего ключа используйте insert_or_assign().

#include <map>
#include <iostream>
using namespace std;
int main() {
    map<int, int> m{{1,3},{2,4},{3,5}};
    m.insert({5,6}); // добавляет новую пару
    m.insert({1,8}); // игнорируется, ключ 1 уже есть
    m.insert_or_assign(1,6); // обновляет ключ 1 значением 6
    cout << "Key\tElement\n";
    for (auto& p : m) {
        cout << p.first << '\t' << p.second << '\n';
    }
    return 0;
}

Вывод:

std::map в C++: полное руководство с примерами кода

Поиск в map

Поиск ключа прост с find(). Если ключ есть, возвращённый итератор указывает на элемент; иначе возвращается end().

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    if (auto it = students.find(201); it != students.end()) {
        cout << "Key 201 has value: " << it->second << endl;
    }
    return 0;
}

Вывод:

std::map в C++: полное руководство с примерами кода

Удаление данных из map

Элементы можно удалять по ключу или по итератору. Метод erase() инвалидирует только итераторы, указывающие на удалённый элемент.

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<string, int> myMap;
    myMap["cow"] = 1;
    myMap["cat"] = 2;
    myMap["lion"] = 3;
    if (auto it = myMap.find("cat"); it != myMap.end()) {
        myMap.erase(it);
    }
    for (auto& p : myMap) {
        cout << p.first << ": " << p.second << endl;
    }
    return 0;
}

Вывод:

std::map в C++: полное руководство с примерами кода

Резюме

  • std::map — отсортированный ассоциативный контейнер с уникальными ключами.
  • Ключи обеспечивают эффективный поиск; значения хранят ассоциированные данные.
  • Все основные операции выполняются за логарифмическое время благодаря красно-чёрному дереву.
  • Итераторы позволяют обход, вставку, удаление и диапазонные запросы.
  • С insert_or_assign() обновление значений становится прямолинейным.
  • Используйте find() для быстрых проверок существования и прямого доступа.
  • Операции удаления могут быть точечными или очищать весь map.

Язык C

  1. Стандартные библиотечные функции в C: практическое руководство
  2. Операторы в C++: типы, примеры и практические программы
  3. Цикл do-while в C++: синтаксис, примеры и вложенные циклы
  4. Оператор switch-case в C++: синтаксис, применение и практические примеры
  5. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  6. Указатели в C++: концепции, примеры и практические применения
  7. Перегрузка операторов в C++: практическое руководство с примерами кода
  8. Освоение std::list в C++: синтаксис, функции и практические примеры
  9. Функции в C++: подробное объяснение с практическими примерами кода
  10. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования