![]() |
|
Программирование >> Расширенная версия языка c++
II Иллюстрация возможностей ассоциативного списка #include <iostream> , -jv.; ,г tinclude <map> using namespace std; i--- int mainO ... ., map<char, int> m; int i ; размещение пар в ассоциативном списке for(i=0; i<10; i++) { m. insert (pair<char, int>CA + i, i) ) ; ( ... ...... char ch; V; cout Ввейте ключ: ; cin ch; map<char, int>: : iterator p; . 1 .;;.- , . , .1- -J-. - поиск значения по заданному ключу . Р =m. find(ch) ; if endO } cout p->second; Vi else cou << Такого ключа в ассоциативном списке нет\п ; return 0; Обратите внимание на использование класса-шаблона pair для образования пар ключ/значение. Типы данных, указанные в классе-шаблоне pair, должны соответствовать типам данных, хранящимся в ассоциативном списке. После того как ассоциативный список инициализирован парами ключ/значение, найти нужное значение по заданному ключу можно с помощью функции fuid(). Функция fmd() возвращает итератор соответствующего ключу элемента или итератор конца ассоциативного списка, если указанный ключ не найден. Когда соответствующее ключу значение найдено, оно сохраняется в качестве второго члена класса-шаблона pair. 2. В предыдущем примере типы пар ключ/значение были указаны явно в конструкции pair<char, int>. Хотя такой подход совершенно правилен, часто проще использовать функцию make pair(), которая создает пары объектов на основе типов данных своих параметров. ttinclude <iostreajn> , . - . #include <inap> usin espace std; int main ( ) { - . map<char, int> m; : int i; . - размещение пар в списке for(i=0; KIO; i++) { . : m. insert (make pair(char) (A + i, i) ) ; - . char ch; cou Введите ключ: ; cin ch; . - inap<char, int>: : iteratorp; поиск значения по заданному ключу р = m. find(ch) ; ..... if (р !- т. end () ) cout << p->second; else cou << Такого ключа в ассоциативном списке кет\п ; return 0; Данный пример отличается от предыдущего только строкой - i . m.insert(make pair(char)(А + i, i)); В данном случае, чтобы в операции сложения А + i не допустить автоматического преобразования в тип int, используется приведение к типу char. Во всем остальном процесс определения типов объектов выполняется автоматически. 3. Так же как и в других контейнерах, в ассоциативных списках можно хранить создаваемые вами типы данных. Например, в представленной ниже программе создается ассоциативный список для хранения слов с соответствующими словам антонимами. С этой целью используются два класса: word (слово) и opposite (антоним). Поскольку для ассоциативных списков поддерживается отсортированный список ключей, в программе для объектов типа word определяется оператор <. Как правило, оператор < необходимо перегружать для всех классов, объекты которых предполагается использовать в качестве ключей. (Помимо оператора < в некоторых компиляторах может потребоваться определить дополнительные операторы сравнения.) Ассоциативный список wiob и антонимов ♦include <io3tream> tinclude <map> , #include <cstring> using namespace std; 452 Самоучитель C++ Class word { char str [20] ; public: wordO { strcpy(str, } word(char *s) { strcpy(str, s); } char getCi { return str; } для объектов типа word слезет определить оператор < (меньше) bool operator< (word а, word b) { - . return ф( a. get {) tO) < 0; . class opposite { , -. char public: opposite 0 tr, ); } . opposite (char *s) ( strcpy(str, s) ; } char { return str; } int mainO map<word, opposite> m; . I::*;; размещение в ассоциативном списке слов и антонимов --К m. insert (pair<word, opposite> iC (word( да ), opposite ( нет )) ) ; opposite> (word( хорошо ), opposite ( плохо )) ) ,- opposite> (word( BneBO ), opposite ( впразо )) ) ; . opposite> (word{ вверх ), opposite ( вниз )} ) ; rV . ; - поиск антонима по заданному слову char str [ВО]; ./ . cou Введите слово: ; . . cin str; , . p =m, find (word(str) ) ; if (p != m.endO ) cout Антонж: p->second.get 0 ; else cou Такого слова в ассоциативном списке нет\п ;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |