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

Карта в стандартной библиотеке шаблонов C++ (STL) с примером печати

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

В C++ MAP представляет собой ассоциативный контейнер, хранящий элементы в отображенной форме. Каждый элемент на карте состоит из пары «ключ-значение» и сопоставленного значения. Два сопоставленных значения не могут иметь одни и те же значения ключа.

Ключевые значения хороши для сортировки и уникальной идентификации элементов. Сопоставленные значения предназначены для хранения содержимого, связанного с ключом. Они могут различаться по типам, но тип члена объединяет их через парный тип, объединяющий оба типа.

Из этого руководства по C++ вы узнаете:

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

Вот причины для использования карты:

Синтаксис:

Чтобы объявить std::map, используйте следующий синтаксис:

std::map<key_datatype, value_datatype>map_name; 

Например:

map<string, int> my_map; 

Мы объявили карту с именем my_map. Карта будет иметь строку в качестве key типы данных и целые числа как значения тип данных.

Типы участников:

Функции-члены могут использовать следующие типы членов в качестве параметров или типа возвращаемого значения:

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

std::map поставляется со встроенными функциями. Некоторые из них включают:

Перебор элементов карты

Вы можете перебирать элементы карты. Нам просто нужно создать итератор и использовать его для этого.
Например:

Пример 1:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

Вывод:

Вот скриншот кода:

Пояснение кода:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка строки в наш код, чтобы использовать его функции.
  3. Включите файл заголовка карты в наш код, чтобы использовать его функции.
  4. Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
  5. Вызовите функцию main(). { отмечает начало тела функции.
  6. Создайте карту с именем Студенты, где ключи будут целыми числами, а значения будут строками.
  7. Вставьте значения на карту Студенты. В карту будут вставлены ключ 200 и значение Алисы.
  8. Вставьте значения на карту Студенты. В карту будут вставлены ключ 201 и значение John.
  9. Используйте функцию size(), чтобы получить размер карты с именем Студенты. Это должно вернуть 2.
  10. Выведите текст на консоль.
  11. Используйте цикл for для создания итератора с именем it для перебора элементов карты с именем Студенты.
  12. Распечатайте значения карты Студенты на консоли.
  13. Конец тела цикла for.
  14. Конец тела функции main().

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

Вы можете вводить элементы в std::map с помощью функции insert(). Помните, что ключи std::map должны быть уникальными.

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

Функция имеет следующие варианты:

insert_or_assing() работает так же, как функция insert(), но если данный ключ уже существует в карте, его значение будет изменено.

Пример 2:

#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 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

Вывод:

Вот скриншот кода:

Пояснение кода:

  1. Включите файл заголовка карты в наш код, чтобы использовать его функции.
  2. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  3. Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
  4. Вызовите функцию main(). { отмечает начало тела функции.
  5. Создайте карту с именем m, где ключи будут целыми числами, а значения будут целыми числами. На карту были внесены три записи.
  6. Вставить новую запись на карту m. Ключ 5 и значение 6 будут вставлены в карту.
  7. Попытка войти в уже существующий ключ. Так как ключ 1 уже существует в карте, запись не будет сделана.
  8. Использование функции insert_or_assign() для вставки или изменения существующей записи. Поскольку ключ 1 уже существует, его значение изменится на 6.
  9. Выведите текст на консоль. Символ «\t» создает горизонтальный пробел, а символ «\n» перемещает курсор мыши на следующую строку.
  10. Используйте цикл for для создания итератора с именем itr для перебора элементов карты с именем m.
  11. Выведите значения карты m на консоль. Символ «\t» создает горизонтальный пробел между каждым ключом и соответствующим ему значением. Напротив, символ «\n» перемещает курсор мыши на следующую строку после каждой итерации.
  12. Конец тела цикла for.
  13. Программа должна возвращать значение после успешного завершения.
  14. Конец тела функции main().

Поиск на карте

Мы можем использовать функцию find() для поиска элементов на карте по их ключам. Если ключ не найден, функция возвращает std::map::end. В противном случае будет возвращен итератор искомого элемента.

Пример 2:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

Вывод:

Вот скриншот кода:

Пояснение кода:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции без ошибок.
  2. Включите файл заголовка строки в наш код, чтобы использовать его функции без ошибок.
  3. Включите файл заголовка карты в наш код, чтобы использовать его функции без ошибок.
  4. Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
  5. Вызовите функцию main(). Символ { отмечает начало тела функции main().
  6. Создайте карту с именем Студенты, ключами которой будут целые числа и строки значений.
  7. Вставьте значения на карту Студенты. В карту будут вставлены ключ 200 и значение Алисы.
  8. Вставьте значения на карту Студенты. В карту будут вставлены ключ 201 и значение John.
  9. Найдите значение, связанное с ключом 201.
  10. Используйте оператор if, чтобы проверить, найдено ли значение для ключа.
  11. Выведите значение ключа рядом с текстом на консоли.
  12. Конец тела оператора if.
  13. Конец тела функции main().

Удаление данных с карты

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

Пример 3:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

Вывод:

Вот скриншот кода:

Пояснение кода:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка строки в наш код, чтобы использовать его функции.
  3. Включите файл заголовка карты в наш код, чтобы использовать его функции.
  4. Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
  5. Вызовите функцию main(). { отмечает начало тела функции main().
  6. Создайте карту с именем my_map, ключи которой будут строками, а значения целыми числами.
  7. Вставьте значения в карту my_map. Ключ Cow и значение 1 будут вставлены в карту.
  8. Вставьте значения в карту my_map. Ключ Cat и значение 2 будут вставлены в карту.
  9. Добавьте значение 3 в карту my_map с ключом льва.
  10. Создайте итератор для перебора карты my_map в поисках ключевого кота.
  11. Удалить элемент, на который указывает итератор.
  12. Используйте итератор для перебора элементов карты my_map от начала до конца.
  13. Распечатайте содержимое карты my_map на консоли.
  14. Программа должна возвращать выходные данные после успешного завершения.
  15. Конец тела функции main().

Обзор:


Язык C

  1. Стандартные библиотечные функции C
  2. Операторы в C++ с примером:что такое, типы и программы
  3. Цикл C++ do…while с примерами
  4. Оператор C++ Switch Case с ПРИМЕРОМ
  5. C++ динамическое выделение массивов с примером
  6. Указатели C++ с примерами
  7. Перегрузка оператора C++ с примерами
  8. std::list в C++ с примером
  9. Функции C++ с примерами программ
  10. Разница между структурой и классом:объяснение на примере C++