Программирование >>  Расширенная версия языка c++ 

1 ... 145 146 147 [ 148 ] 149 150 151 ... 227


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 Такого слова в ассоциативном списке нет\п ;



1 ... 145 146 147 [ 148 ] 149 150 151 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика