Перейти к содержимому

Что такое контейнер map в с++ и когда необходимо его использовать и массивы

Что такое контейнер map в С++ и когда необходимо его использовать и массивы

При использовании массива строк в C++, каждой строке ставится в соответствие цифра(индекс массива).
Но, что делать в случае когда требуется установить соответствие между именами и номерами телефонов(задача о хранении телефонного справочника). В этом случае с массивами увы такого не провернешь. И поэтому стоит обратить внимание на контейнер map в c++.

Map в c++, которую также называют ассоциативным массивом, позволяет устанавливать соответствие между двумя элементами любого типа, первый из которых называют ключом(key), а второй значением(value).

Стоит запомнить, что в c++ map все ключи являются уникальными! В случае же если в структуре данных могут находится дублирующие ключи стоит использовать multimap. О multimapпоговорим в другой статье.

Простой пример использования map в c++

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

using namespace std;

int main ()
{
  // следующая строка создает соответствие между 
  // двумя строками: именем владельца и маркой его машины
  map<string,string> nameToCar;

  nameToCar["Ivan"]="BMW";
  nameToCar["Alex"]="Honda";
 
  cout << "Ivan`s car is a " << nameToCar["Ivan"] << endl;
  cout << "Alex`s car is a " << nameToCar["Alex"] << endl;
}
контейнер map, map c++, ассоциативный массив, контейнер map, ассоциативный контейнер, пример работы с map с+

Стоит отметить, что как и другие контейнеры, map в c++ располагает следующими методами: size, begin и end.

Давайте рассмотрим еще один пример. Нижеприведенный код делает часточный подсчет каждого символа в строке и выводит частоту употребления каждого символа. При итерации по map в с++ крайне удобно использовать класс pair (пара) стандартной библиотеки С++, которая предоставляет два публичных поля first и second (first – ключ, second – значение, соответственно).

#include <iostream> 
#include <algorithm>
#include <map>
using namespace std; 

map<char,int> symByFrequency;

void countFreq(char sym) {
  // Увеличиваем на один частотность встреченного sym в map'e
  symByFrequency[sym]++;
}

void printPair(pair<char,int> the_pair){
    cout << the_pair.first << " " << the_pair.second << endl;
}

string text="maps, constainers and associative array"; 

int main ()
{
   // считаем частоту появления для каждого символа
   // и выводим результат на экран
   for_each(text.begin(), text.end(), countFreq);
   for_each(symByFrequency.begin(), symByFrequency.end(), printPair);
}
контейнер map, map c++, ассоциативный массив, контейнер map, ассоциативный контейнер, пример работы с map с+

Таким образом в нашем случае for_each передает оперирует парами вида pair<char,int> и предоставляет удобный доступ и к ключу и к значению.

Задание для тренировки навыков работы с map в С++

Напишите программу, которая просит юзера ввести имя, либо exit в том случае, если юзер хочет увидеть список всех введенных ранее имен и выйти из программы. Если введенной пользователем имя вводилось ранее, требуется вывести относящийся к данному имени номер телефона, иначе запросить у пользователя ввести номер.
Крохотная подсказка к заданию выше: стоит заиспользовать следующего вида мапу: map<string,string> addressBook, и обратить внимание на методы for_each и find. Успехов!

4.7/5 - (4 голоса)
Спасибо что пользуетесь сайтом best-exam. Поделитесь сайтом с друзьями!