2.7. Словари и словари с дубликатами

Словари

Происхождение термина «ассоциативный контейнер» становится ясным, как только мы начинаем рассматривать словари. Например, телефонный справочник связывает (ассоциирует) имена с номерами. Имея заданное имя или ключ, мы хотим узнать соответствующий номер. Другими слова­ми, телефонная книга является отображением имен на числа. Если имя Johnson, J. соответствует номеру 12345, STL позволяет нам определить словарь D, так что мы можем записать следующий оператор для выраже­ния отображения, показанного на второй строчке:

D["Johnson, J."] = 12345;

JohnsonJ."    ->      12345 Отметим сходство с обычными массивами, например:

а[5]   =   'Q';

5     ->   "Q"

Словари и словари с дубликатами

63

В последнем случае индексами являются значения 0,1,2,..., но на словари это ограничение не распространяется. Нижеприведенная программа пока­зывает, что словарями удобно пользоваться:

// mapl.cpp: Первая программа со словарями, ttinclude <iostream> ttinclude <string> ttinclude <map> using namespace std;

class compare { public:

bool operator()(const char *s, const char *t)const

{ return strcmp(s, t) < 0;

} };

int main()

{ map<char*, long, compare> D;

D["Johnson, J."]  = 12345;

D["Smith, P."]    = 54321;

D["Shaw, A."]    = 99999;

D["Atherton, K."] = 11111;

char GivenName[30];

cout « "Enter a name: ";

cin.get(GivenName, 30);

if (D. find (GivenName) != D.endO)

cout « "The number is " « D[GivenName];

else

cout « "Not found.";

cout « endl;

return 0; }

В отличие от предыдущего примера программа тар.срр содержит опреде­ленный нами функциональный объект (функциональные объекты рас­смотрены в разделе 1.12). Определение

map<char*,   long,   compare> D;

справочника D содержит следующие параметры шаблона:

• тип ключа char*;

• тип сопутствующих данных long;

• класс функционального объекта compare.

Функция-член operator^) класса compare определяет отношение меньше для ключей.

Словари с дубликатами

Следующая программа показывает, что словари с дубликатами могут со­держать повторяющиеся ключи:

// multimap.срр: Множество с дубликатами,

//                                     содержащее одинаковые ключи.

#include <iostream>


<< назад вперед >>