Программирование. Принципы и практика использования C++ Исправленное издание, стр. 295
Сходство интерфейсов классов
vectorlistpair<Key,Value>template<class T1, class T2> struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair():first(T1()),second(T2()) { } pair(const T1& x,const T2& y):first(x),second(y) { } template<class U,class V> pair(const pair<U,V>& p):first(p.first), second(p.second) { }};template<class T1,class T2> pair<T1,T2> make_pair(T1 x, T2 y){ return pair<T1,T2>(x,y);}Мы скопировали полное определение класса
pairmake_pair()
map(Apple,7) (Grape,2345) (Kiwi,100) (Orange,99) (Plum,8) (Quince,0)Порядок вставки узлов значения не имеет.
Операция
insert()booltrueinsert()boolfalse
Cmpmapmap<string, double, No_case> m;Предикат
No_caseless<Key>21.6.3. Еще один пример ассоциативного массива
Для того чтобы оценить полезность контейнера
mapvectorСначала создадим ассоциативный контейнер, содержащий пары (символ,цена).
map<string,double> dow_price; // Индекс Доу - Джонса (символ, цена); // текущие котировки см. на веб-сайте www.djindexes.comdow_price["MMM"] = 81.86;dow_price ["AA"] = 34.69;dow_price ["MO"] = 54.45;// ...Ассоциативный массив, содержащий пары (символ, вес), объявляется так:
map<string,double> dow_weight; // Индекс Доу-Джонса (символ, вес)dow_weight.insert(make_pair("MMM", 5.8549));dow_weight.insert(make_pair("AA",2.4808));dow_weight.insert(make_pair("MO",3.8940));// ...Мы использовали функции
insert()make_pair()mappairАссоциативный контейнер, содержащий пары (символ, название).
map<string,string> dow_name; // Доу-Джонс (символ, название)dow_name["MMM"] = "3M Co.";dow_name["AA"] = "Alcoa Inc.";dow_name["MO"] = "Altria Group Inc.";// ...С помощью этих ассоциативных контейнеров можно легко извлечь любую информацию. Рассмотрим пример.
double alcoa_price = dow_price ["AAA"]; // считываем значения из // ассоциативного массиваdouble boeing_price = dow_price ["BA"];if (dow_price.find("INTC") != dow_price.end()) // находим элемент