Контейнеры типа 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;