Отображение (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; |