std::map контейнер С++ ключ-значение отсортированный по ключу

- map или словарь это контейнер для хранения сортированных уникальных записей - пары ключ-значение. Подключается через #include <map>

- Сортировка происходит по ключу.

- Ключи должны быть уникальны. При добавлении записи с существующим ключом - добавляемая запись будет потеряна.

- Ключ не обязательно целое число, может быть строкой и т.д.

- map основан на красно-черных деревьях и поиск, вставка и удаление в нем осуществляются за логарифмическое время OLog(N).

- Для использования сортированных неуникальных записей по ключу, используйте контейнер std::multimap.

- Для использования несортированных уникальных записей по ключу, используйте контейнер std::unordered_map.

- Для использования несортированных неуникальных записей по ключу, используйте контейнер std::unordered_multimap.

МетодОписаниеПримерСложность
value_type& [const key_type& k] Доступ к элементу по КЛЮЧУ. auto i = mp.[20]; O(logN)
value_type& at(const key_type& k) Доступ к элементу по ключу. Выбрасывает исключение при отсутствии ключа. auto i = mp.at(20); O(logN)
begin() Возвращает итератор на первый элемент. cout << mp.begin()->first; O(1)
clear() Удаляет все элементы map. mp.clear(); O(n)
count(const key_type& k) Возвращает количество элементов, 0 или 1 size_t cnt = mp.count("hoba"); O(1)
emplace(key_type k, value_type value) Вставляет значение пару ключ-значение в map. При совпадении ключа значение не меняется. mp.emplace(8, "buba"); O(logN)
emplace_hint(iterator it, key_type k, value_type value) Вставляет значение пару ключ-значение перед итератором map. При совпадении ключа значение не меняется. mp.emplace_hint(mp.begin(), 8, "buba"); O(1)
O(logN)
empty() Возвращает пустой ли map. if(!mp.empty()); O(1)
end() Возвращает итератор на место после последнего элемента. auto i = mp.end(); O(1)
erase(const key_type& k) Удаляет элемент с заданным ключом. mp.erase(3); O(n)
erase(iterator pos) Удаляет элемент с заданным итератором. mp.erase(mp.begin()); O(1)
erase(iterator it_begin, iterator it_end) Удаляет элементы в заданном диапазоне итераторов. mp.erase(++mp.begin(), mp.end()); O(n)
find() Возвращает итератор на элемент по ключу или std::end(). auto i = mp.find(5); O(1)
insert(initializer_list<value_type<g il) Вставляет элемент. Если ключ уже существует - значение не меняется. mp.insert({2, "cow"}); O(logN)
insert_or_assign(const key_type& k, value_type&& value) Вставляет элемент. Если ключ уже существует - значение заменяется. Возвращает итератор на элемент. С++17 auto it = mp.insert_or_assign(2, "cow"); O(logN)
map Конструктор без аргументов. Создает новый пустой map. map<int, string> mp; O(1)
map(initializer_list<value_type> il) Конструктор. Создает map из списка инициализации. map<int, string> mp{{5, "ara"}, {3, "dog"}, {1, "cat"}}; O(n)
map(iterator it_start, iterator it_stop) Конструктор. Создает map из диапазона итераторов другого контейнера. map mp1(++mp.begin(), mp.end()); O(n)
map(const map mp) Конструктор копирования. Создает map со значениями mp map mp1(mp);
map<int, string> mp1(mp);
O(n)
max_size() Возвращает максимально возможный размер map. size_t msize = mp.max_size(); //128102389400760775 O(1)
lower_bound(const Key& key ); Возвращает итератор на элемент с ключом не меньше (>=) аргумента, или end() при отсутствии. auto it = mp.lower_bound(3); O(logN)
rbegin() Возвращает реверсивный итератор на конец map. auto i = mp.rbegin(); O(1)
rend() Возвращает реверсивный итератор на начало map. auto i = mp.rend(); O(1)
swap(map& v2) Обменивает содержимое mapов mp.swap(v2); O(1)
upper_bound(const Key& key ); Возвращает итератор на элемент с ключом больше (>) аргумента, или end() при отсутствии. auto it = mp.upper_bound(3); O(logN)

#include <iostream> // cout
#include <map>     // map
using namespace std;

int main() {
    map<string, int> m_empty; // Создание словаря
    map<string, int> m_si_test = {{"Apple", 1}, {"Orange", -15}, {"Nut", 5}};   // Создание словаря
    map<string, int> m_si{{"Apple", 1}, {"Orange", 15}, {"Nut", 5}};           // Создание словаря
    map<int, int> m_ii{{1, 1}, {2, 4}, {3, 9}};                                 // Создание словаря
    map<string, string> m_ss{{"hey", "hop"}, {"la", "la"}, {"ley", "ka"}};      // Создание словаря

    m_si["Peach"] = 10;     // Добавление элемента в словарь(ключ - строка, значение - int)
    m_ii[4] = 16;           // Добавление элемента в словарь(ключ - int, значение - int)
    m_ss["huba"] = "buba";  // Добавление элемента в словарь(ключ - строка, значение - строка)

    m_ii.erase(3); // Удаление записи с ключом 3
    m_ii.erase(3); // Можно удалять несуществующие ключи
    m_si.erase("Orange"); // Удаление записи с ключом "Orange"

    cout << m_si["Nut"] << endl;    //5 Обращение к значению по ключу
    cout << m_ii[3] << endl;        //9
    cout << m_ss["hey"] << endl;    //hop

    if(m_ss.count("para") == 1){    // Поиск по ключу в словаре count(key) возвращает 0 или 1-если найдено совпадение
        cout << "para find in key"; // 
    }

    for(auto iter = m_ss.begin(); iter != m_ss.end(); iter++){  // Перебор словаря через итераторы
        cout << iter->first << "_" << iter->second << " ";      //hey_hop huba_buba la_la ley_ka
    }
    cout << endl;

    for (const auto& [fruct, price] : m_si){    // Перебор словаря
        cout << fruct << "_" << price << " ";   //Apple_1 Nut_5 Peach_10
    }
    cout << endl;
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.