Следующий пост -

Работа с ассоциативным массивом map

Рубрика: C++, Дата: 3 March, 2013, Автор:
Tags: ,

В С++ эсть контейнер ассоциативный массив map.

Чтобы можно было начать сним работать в файле нужно подключить заголовок и определить слово map

#include <map>
using std::map;

Все мы теперь можем непосредственно создавать ассоциативные массивы. Итак приступим.

Создание переменной типа map.

Чтобы создать переменную map нужно определить следующую строку:

//создаем массив с ключом типа string и значением int
map<string, int> mass;
//массив с ключом типа char* и значением double
map<char*,double>mass1;

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

Добавление элементов:

Как оказалось все очень просто, работаем просто как с обычным ассоциативным массивом, то есть:

mass["hel"]=35;

эта строка инициализирует элемент mass[“hel”] значением 35, то есть если мы щас вызовем

cout <<mass["hel"]<<endl;

то нам выведется на экран 35. Не плохо так сказать.

Вывод с помощью итераторов.

Добавляем два элемента:

mas["hel"]=35;
mas["hellow"]=40;

пытаемся вывести с помощью итератора:

//создаем итератор
map<string,double>::iterator it=mas.begin();
for(;it!=mas.end();++it)
{
	cout <<(*it).first<<' '<<(*it).second<<endl;
}

отак от выводиться этот масси mas, тут как мы видем разыменование оператора и .first (*it).first используется для вывода ключа значений, а разыменование и .second (*it).second для вывода самого значения. Программка эта выводить следующую фигню:

hel 35
hellow 40

также небось можно и менять значение ключей и самих значений через итераторы

например:

(*it).second=50;//спокойно меняет значение
(*it).first="hr";//ошибка вроде как const менять нельзя.

Вродь попробовал оказалось значение ключей менять нельзя, а просто значение спокойно меняется. Теперь попробуем удалить какой нить элемент.

Удаление элементов

Пошарил я по инету и ничо не нашол кроме как одной функции erase(), уже нам знакомой ранее из работа с векторами, эта фигня удаляет элемент по итератору, либо последовательность элементов от итератора до итератора, удалим один пока элемент,  начальный, то есть передадим mas.begin() и посмотрим, что из этого получится:

map<string,double>::iterator it=mas.begin();
if(it!=mas.end())
{
	mas.erase(it);//удаление
}

от например отаким кодом. И на выходе мы получим следущее

выведется

hellow 40

всего одна строка, так как первый элемент удалился.

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

rss