Карта в стандартній бібліотеці шаблонів C++ (STL)

Карти є асоціативні контейнери які зберігають елементи у відображеному вигляді. Кожен елемент має ключове значення та відображене значення. Два зіставлених значення не можуть мати однакові ключові значення.

std::map — це шаблон класу для контейнерів карт, який визначено у файлі заголовка.

Основні функції-члени std::map

Деякі основні функції, пов’язані з std::map:

  • почати() – Повертає ітератор до першого елемента на карті.
  • кінець() – Повертає ітератор до теоретичного елемента, який слідує за останнім елементом у карті.
  • розмір() – Повертає кількість елементів на карті.
  • max_size() – Повертає максимальну кількість елементів, які може містити карта.
  • порожній() – Повертає, чи карта порожня.
  • вставка пари (ключ-значення, значення карти) – Додає новий елемент на карту.
  • стерти (позиція ітератора) – Вилучає елемент у позиції, на яку вказує ітератор.
  • стерти (const g) – Вилучає ключ-значення «g» із карти.
  • очистити() – Видаляє всі елементи з карти.

Приклади std::map

У наступних прикладах показано, як виконувати основні операції з контейнерами карти.

Приклад 1: Функції begin() і end().

C++




// C++ program to illustrate the begin and end iterator> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>mp; // Вставити деякі значення в карту mp['one'] = 1; mp['два'] = 2; mp['три'] = 3; // Отримати ітератор, що вказує на перший елемент у // карті mapint>::iterator it = mp.begin(); // Ітерація по карті та друк елементів while (it != mp.end()) { cout < < 'Key: ' < < ', Value: ' ++it; } return 0; }>

Вихід

Key: one, Value: 1 Key: three, Value: 3 Key: two, Value: 2 

Складність вищеописаного способу:

Часова складність: O(n), де n – розмір карти.

Допоміжний простір: O(n)

приклад 2: функція size().

C++




// C++ program to illustrate the size() function> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>карта; // Вставте деякі значення в карту map['one'] = 1; map['two'] = 2; map['three'] = 3; // Роздрукувати розмір карти cout < < 'Size of map: ' < < map.size() < < endl; return 0; }>

Вихід

Size of map: 3 

Складність вищеописаного способу:

Часова складність: O(1).

Приклад 3: Реалізація карти

CPP




// CPP Program to demonstrate the implementation in Map> // divyansh mishra -->divyanshmishra101010>> #include> #include> #include> using> namespace> std;> int> main()> {> > // empty map container> > map <> int> ,> int> >gquiz1;> > // insert elements in random order> > gquiz1.insert(pair <> int> ,> int> >(1, 40));> > gquiz1.insert(pair <> int> ,> int> >(2, 30));> > gquiz1.insert(pair <> int> ,> int> >(3, 60));> > gquiz1.insert(pair <> int> ,> int> >(4, 20));> > gquiz1.insert(pair <> int> ,> int> >(5, 50));> > gquiz1.insert(pair <> int> ,> int> >(6, 50));> > // another way of inserting a value in a map> > gquiz1[7] = 10;> > // printing map gquiz1> > map <> int> ,> int> >::ітератор itr;> > cout < <> ' The map gquiz1 is : '> ;> > cout < <> ' KEY ELEMENT '> ;> > for> (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {> > cout < <> ' '> ' ' < < ' '; } cout < < endl; // assigning the elements from gquiz1 to gquiz2 map gquiz2(gquiz1.begin(), gquiz1.end()); // друкуємо всі елементи карти gquiz2 cout < < ' The map gquiz2 after' < < ' assign from gquiz1 is : '; cout < < ' KEY ELEMENT '; for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } cout < < endl; // remove all elements up to // element with key=3 in gquiz2 cout < < ' gquiz2 after removal of' ' elements less than key=3 : '; cout < < ' KEY ELEMENT '; gquiz2.erase(gquiz2.begin(), gquiz2.find(3)); for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } // remove all elements with key = 4 int num; num = gquiz2.erase(4); cout < < ' gquiz2.erase(4) : '; cout < < num < < ' removed '; cout < < ' KEY ELEMENT '; for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } cout < < endl; // lower bound and upper bound for map gquiz1 key = 5 cout < < 'gquiz1.lower_bound(5) : ' < < ' KEY = '; cout ' '; cout < < ' ELEMENT = ' < < endl; cout < < 'gquiz1.upper_bound(5) : ' < < ' KEY = '; cout ' '; cout < < ' ELEMENT = ' < < endl; return 0; }>

Вихід

The map gquiz1 is : KEY ELEMENT 1 40 2 30 3 60 4 20 5 50 6 50 7 10 The map gquiz2 after assign from gquiz1 is : KEY ELEMENT 1 40 2 30 3 60 4 20 5 50 6 50 7 10 gquiz2 after remov... 

Складність вищеописаного способу:

Часова складність: O(n log(n)), оскільки n — розмір карти
Допоміжні приміщення: O(n)

Приклад 4: Реалізація карти цілих чисел

C++




// C++ program to implement map container> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>карта; // Вставте деякі значення в карту map['one'] = 1; map['two'] = 2; map['three'] = 3; // Надрукувати значення в карті cout < < 'Key: one, Value: ' < < map['one'] < < endl; cout < < 'Key: two, Value: ' < < map['two'] < < endl; cout < < 'Key: three, Value: ' < < map['three'] < < endl; // Check if a key is in the map if (map.count('four')>0) { cout < < 'Key 'four' is in the map' < < endl; } else { cout < < 'Key 'four' is not in the map' < < endl; } return 0; }>

Вихід

Key: one, Value: 1 Key: two, Value: 2 Key: three, Value: 3 Key 'four' is not in the map 

Список усіх функцій std::map

Наступна таблиця містить усі функції, визначені в класі std::map.

функція

Визначення

map::insert()

Вставити елементи з певним ключем у контейнер карти –> O(log n)

map:: count()

Повертає кількість збігів з елементом із ключ-значенням «g» у карті. –> O(log n)

карта equal_range()

Повертає ітератор пар. Пара відноситься до меж діапазону, який включає всі елементи в контейнері, які мають ключ, еквівалентний k.

стерти карту()

Використовується для видалення елементів із контейнера –> O(log n)

карта rend()

Повертає зворотний ітератор, що вказує на теоретичний елемент безпосередньо перед першою парою ключ-значення в карті (яка вважається її зворотним кінцем).

карта rbegin()

Повертає зворотний ітератор, який вказує на останній елемент карти.

карта find()

Повертає ітератор до елемента з ключ-значенням «g» у карті, якщо знайдено, інакше повертає ітератор до кінця.

map crbegin() і crend()

crbegin() повертає постійний зворотний ітератор, який посилається на останній елемент у контейнері карти. crend() повертає постійний зворотний ітератор, що вказує на теоретичний елемент перед першим елементом у карті.

map cbegin() і cend()

cbegin() повертає постійний ітератор, який посилається на перший елемент у контейнері карти. cend() повертає постійний ітератор, що вказує на теоретичний елемент, який слідує за останнім елементом мультивідображення.

карта emplace()

Вставляє ключ і його елемент у контейнер карти.

карта max_size()

Повертає максимальну кількість елементів, які може містити контейнер карти –> O(1)

карта upper_bound()

Повертає ітератор до першого елемента, який еквівалентний зіставленому значенню з ключ-значенням «g» або обов’язково йде після елемента з ключ-значенням «g» у карті

оператор карти=

Призначає вміст контейнера іншому контейнеру, замінюючи його поточний вміст.

відобразити lower_bound()

Повертає ітератор до першого елемента, який еквівалентний зіставленому значенню з ключ-значенням «g» або точно не передуватиме елементу з ключ-значенням «g» у карті –> O(log n)

карта emplace_hint()

Вставляє ключ і його елемент у контейнер карти з заданою підказкою.

map value_comp()

Повертає об’єкт, який визначає порядок розташування елементів на карті (« <» за замовчуванням).

map key_comp()

Повертає об’єкт, який визначає порядок розташування елементів на карті (« <» за замовчуванням).

map::size()

Повертає кількість елементів на карті.

map::empty()

Повертає, чи карта порожня

map::begin() і end()

begin() повертає ітератор до першого елемента на карті. end() повертає ітератор до теоретичного елемента, який слідує за останнім елементом у карті

map::operator[]

Цей оператор використовується для посилання на елемент, присутній у позиції, заданій всередині оператора.

map::clear()

Видаляє всі елементи з карти.

map::at() і map::swap()

Функція at() використовується для повернення посилання на елемент, пов’язаний з ключем k. Функція swap() використовується для обміну вмістом двох карт, але карти мають бути одного типу, хоча розміри можуть відрізнятися.