Программирование >>  Инициализация объектов класса, структура 

1 ... 95 96 97 [ 98 ] 99 100 101 ... 395


int count = 0;

map<string,int>::iterator it = word count.find( wrinkles ); if ( it != word count.end() )

элемент, если ключ найден, и итератор end() в противном случае. Например:

count = (*it).second;

Значением итератора является указатель на объект pair, в котором first содержит ключ, а second - значение. (Mi вернемся к этому в следующем подразделе.)

6.12.3. Навигация по элементам отображения

После того как м1 построили отображение, хотелось бы распечатать его содержимое. Мы можем сделать это, используя итератор, начальное и конечное значение которого получают с помощью функций-членов begin() и end() . Вот текст функции

void

display map text( map<string,loc*> *text map ) {

typedef map<string,loc*> tmap; tmap::iterator iter = text map->begin(), iter end = text map->end();

while ( iter != iter end ) {

cout << word: << (*iter).first << ( ;

int loc cnt = 0;

loc *text locs = (*iter).second; loc::iterator liter = text locs->begin(),

liter end = text locs->end();

while (liter != liter end ) {

if ( loc cnt )

cout << ,;

else ++loc cnt; cout

++liter;

(*liter).first

(*liter).second << );

cout << ++iter;

cout << endl;

display map text() :

)\n ;

Если наше отображение не содержит элементов, данная функция не нужна. Проверить, пусто ли оно, можно с помощью функции-члена size() :

find (keyValue): функция-член find() возвращает итератор, указывающий на



if ( text map->size() )

display map text( text map );

Но более простым способом, без подсчета элементов, будет вызов функции-члена

if ( ! text map->empty() )

empty() :

display map text( text map );

6.12.4. Словарь

Вот небольшая программа, иллюстрирующая построение отображения, поиск в нем и обход элементов. Здесь используются два отображения. Первое, необходимое для преобразования слов, содержит два элемента типа string. Ключом является слово, которое нуждается в специальной обработке, а значением - слово, заменяющее ключ. Для простоты мы задали пары ключ/значение непосредственно в тексте программы (вы можете модифицировать программу так, чтобы она читала их из стандартного ввода или из файла). Второе отображение используется для подсчета произведенных замен. Текст программы выглядит следующим образом:



#include <vector> #include <iostream>

С++iдляlнаeинаюIiих> 296

int main()

map< string, string > trans map; typedef map< string, string >::value type valType;

первое упрощение: жестко заданн словарь

trans map.insert( va1Type( gratz , grateful ));

trans map.insert( va1Type( em , them ));

trans map.insert( va1Type( cuz , because ));

trans map.insert( va1Type( nah , no ));

trans map.insert( va1Type( sez , says ));

trans map.insert( va1Type( tanx , thanks ));

trans map.insert( va1Type( wuz , was ));

trans map.insert( va1Type( pos , suppose ));

напечатаем словарь map< string,string >::iterator it;

cout << Наш словарь подстановок: \n\n ; for ( it = trans map.begin();

it != trans map.end(); ++it ) cout << кч: << (*it).first << \t

<< значение: << ( it).second << \n ;

cout << \n\n ;

второе упрощение: жестко заданн текст string textarray[14]={ nah , I , sez , tanx , cuz , I , wz , pos , to , not , cuz , I , z , gratz };

vector< string > text( textarray, vector< string >::iterator iter;

textarray+14 );

vector<

напечатаем текст

cout << Исходн вектор строк:\п\п ; int cnt = 1;

for ( iter = text-begin(); iter != text.end();

++iter,++cnt ) cout << *iter << ( cnt % 8 ? : \n );

cout << \n\n\n ;

map для сбора статистики map< string,int > stats;

typedef map< string,int >::value type statsValType; здесь происходит реальная работа

for ( iter=text.begin(); iter != text.end(); ++iter )

if (( it = trans map.find( *iter )) != trans map.end() )

if ( stats.count( *iter ))

stats [ *iter ] += 1; else stats.insert( statsVa1Type( *iter, 1 )); *iter = (*it).second;

напечатаем преобразованн текст

cout << Нреобразованн вектор строк:\п\п ;

cnt = 1;

for ( iter = text.begin(); iter != text.end();

++iter, ++cnt ) cout << *iter << ( cnt % 8 ? : \n ); cout << \n\n\n ;

напечатаем статистику cout << И напоследок статистика:\n\n ; map<string,int,less<string>,allocator>::iterator siter;

for (siter=stats.begin(); siter!=stats.end(); ++siter)

cout << (*siter).first <<



1 ... 95 96 97 [ 98 ] 99 100 101 ... 395

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