Контейнеры
типа map
Отображение
(map) является сортируемым ассоциативным контейнером, который ассоциирует объекты
типа key с объектами типа value. Map — это Pair Associative Container, так как
он хранит пары типа pair<const Key, Data>. Говорят также о Unique Associative
Container, имея в виду, что в контейнере типа тар не может быть одинаковых элементов.
Отображения являются одними из самых мощных и удобных типов контейнеров. Рассмотрим
их работу на примерах. Не забудьте вставить директиву #include <map>:
void main ()
{
//=========
Создаем отображение строки в целое
map<string,
int>
m;
map<string,
int>:
:_Pairib
pib;
map<string,
int>:
:iterator
it;
//=========
Создаем новый тип для удобства
typedef
pair<string,
int>
MyPair; MyPair p("Monday", 1); m.insert(p);
//=========
Изменяем компоненты пары
p.first
= "Tusday";
p.second
= 2;
pib
= m.insert(p);
cout
« "\n\nlnserting: "
«
(*pib.first).first « ","
«
(*pib.first).second
«
"\nResult is: " « pib.second;
pib
= m.insert(p);
cout
« "\n\nlnserting: "
«
(*pib.first).first « ","
«
(*pib.first).second
«
"\nResult is: " « pib.second;
//=========
Работаем с индексом
m["Wednesday"] = 3;
m["Thirsday"] = 4;
m["Friday"]
= 5;
//=========
Работаем с динамической памятью
MyPair
*pp = new MyPair("Saturday", 6);
m.iftsert(*pp);
delete
pp;
cout«"\n\n\t
<string,int> pairs :\n";
for (it = m.begin ();
if
!= m.end(); it++)
cout « "\n(" « it->first«","<<it->second«") ";
cout «"\n\n";
}
Результат работы
этого фрагмента выглядит так:
Inserting:
Tusday, 2 Result is: 1
Inserting:
Tusday, 2 Result is: 0
<string,int>
pairs:
(Friday,
5) (Monday, 1) (Saturday, 6) (Thirsday, 4) (Tusday, 2) (Wednesday, 3)
Как видите,
пары отсортированы в лексикографическом порядке. Если потребуется восстановить
естественный порядок, то это можно сделать, поменяв порядок следования аргументов
при объявлении шаблона на
map<int,
string> m;
Такую замену
придется сделать и для всех других, связанных с шаблоном типов данных. Отметьте
также, что при работе с отображениями недостаточно разадресо-вать итератор (*it),
чтобы получить объект им указываемый. Теперь вы должны писать (*it) .first или
it->first, чтобы получить какой-то объект. Характерно, что эти выражения
могут стоять как в левой, так и в правой части операции присвоения, то есть
вы можете записать:
it->first = "Sunday";
int n = it->second;