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

1 ... 97 98 99 [ 100 ] 101 102 103 ... 395


if ( exclusion set.count( textword )) continue;

существование в функцию build word miap():

добавим отсутствщее слово

6.13.3. Навигация по множеству

Для проверки наших кодов реализуем небольшую функцию, выполняющую поиск по одному слову (поддержка языка запросов будет добавлена в главе 17). Если слово найдено, мы будем показывать каждую строку, в которой оно содержится. Слово может повторяться в строке, например:

i tomorrow and tomorrow and tomorrow

однако такая строка будет представлена только один раз.

Одним из способов не учитывать повторное вхождение слова в строку является

получим указатель на вектор позиций loc ploc = (*text map) [ ery text ];

переберем все позиции вставим все номера строк в множество set< short > occurrence lines; loc::iterator liter = ploc->begin(),

liter end = ploc->end();

while ( liter != liter end ) {

occurrence lines.insert( occurrence lines.end(),

(*liter).first );

++liter;

использование множества, как показано в следующем фрагменте кода:

каждому элементу новое значение. Однако ассоциативные контейнеры не позволяют явно задать размер. Чтобы скопировать элементы в наше множество, мы должны заставить copy() вставлять элементы. Именно для этого служит класс inserter (детально он рассматривается в разделе 12.4).

6.13.2. Поиск элемента

Две операции, позволяющие отыскать в наборе определенное значение, - это find() и count(). find() возвращает итератор, указывающий на найденный элемент, или значение, равное end(), если он отсутствует. count() возвращает 1 при наличии элемента и 0 в противном случае. Добавим проверку на



register int size = occurrence lines.size(); cout << \n << ery text

<< встречается << size

<< раз( а): )

<< \n\n ;

set< short >::iterator it=occurrence lines.begin(); for ( ; it != occurrence lines.end(); ++it ) { int line = -it;

cout << \t( строка

<< line + 1 << )

<< (*text file)[line] << endl; множество, чтобы показать все номера строк, где встретилось данное слово:

(Полная реализация query text() представлена в следующем разделе.)

Класс set поддерживает операции size() , empty() и erase() точно таким же образом, как и класс map, описанный выше. Кроме того, обобщенные алгоритмы предоставляют набор специфических функций для множеств, например set union() (объединение) и set difference() (разность). (Они использованы при реализации языка запросов в главе 17.)

Упражнение 6.23

Добавьте в программу множество слов, в которых заключающее s не подчиняется общим правилам и не должно удаляться. Примерами таких слов могут быть Pythagoras, Brahms и Bume Jones. Включите в функцию suffix s() из раздела 6.10 проверку этого набора.

Упражнение 6.24

Определите вектор, содержащий названия книг, которые вы собираетесь прочесть в ближайшие шесть виртуальных месяцев, и множество, включающее названия уже прочитанных произведений. Напишите программу, которая выбирает для вас книгу из вектора при условии, что вы ее еще не прочитали. Выбранное название программа должна заносить в множество прочитанн1х. Однако вы могли отложить книгу; следовательно, нужно обеспечить возможность удалять ее название из множества прочитанных. По окончании шести виртуальных месяцев распечатайте список прочитанного и непрочитанного.

6.14. Окончательная программа

Ниже представлен полный текст программы, разработанной в этой главе, с двумя модификациями: мы инкапсулировали все структуры данных и функции в класс TextQuery (в последующих главах м1 обсудим подобное использование классов), кроме того, текст был изменен, так как наш компилятор поддерживал стандарт С++ не полностью.

Контейнер set не допускает дублирования ключей. Поэтому можно гарантировать, что occurrence lines не содержит повторений. Теперь нам достаточно перебрать данное



Например, библиотека iostream не соответствовала текущему стандарту. Шаблоны не поддерживали значения аргументов но умолчанию. Возможно, вам придется изменить кое-что в этой программе, чтобы она компилировалась в вашей системе.



1 ... 97 98 99 [ 100 ] 101 102 103 ... 395

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