|
Программирование >> Инициализация объектов класса, структура
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 <<
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |