return strcmp(a.get(), b.get()) < 0;

}

class meaning {

  char str[80];

 public:

  meaning() { strcmp(str, " ");}

  meaning(char *s) { strcpy(str, s); }

  char *get() { return str; }

};

int main()

{

 map dictionary;

 /* Помещаем в отображение объекты классов word и meaning. */

 dictionary.insert( pair (word("дом"), meaning("Место проживания.")));

 dictionary.insert( pair (word("клавиатура"), meaning("Устройство ввода данных.")));

 dictionary.insert( pair (word("программирование"), meaning("Процесс создания программы.")));

 dictionary.insert( pair (word("STL"), meaning("Standard Template Library")));

 // По заданному слову находим его значение.

 char str[80];

 cout << "Введите слово: ";

  cin >> str;

 map::iterator р;

 р = dictionary.find(word(str));

 if(p != dictionary.end())

  cout << "Определение: " << p->second.get();

 else cout << "Такого слова в словаре нет.\n";

 return 0;

}

Вот один из возможных вариантов выполнения этой программы.

Введите слово: дом

Определение: Место проживания.

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

Алгоритмы

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

В библиотеке STL определено множество алгоритмов, которые описаны в табл. 21.5. Все эти алгоритмы представляют собой шаблонные функции. Это означает, что их можно применять к контейнеру любого типа.

Подсчет элементов

Одна из самых популярных операций, которую можно выполнить для любой последовательности элементов, — подсчитать их количество. Для этого можно использовать один из алгоритмов: count() или count_if(). Общий формат этих алгоритмов имеет следующий вид.

template

ptrdiff_t count(InIter start, InIter end, const T &val);

template

ptrdiff_t count_if(InIter start, InIter end, UnPred pfn);

Алгоритм count() возвращает количество элементов, равных значению val, в последовательности, границы которой заданы параметрами start и end. Алгоритм count_if(), действуя в последовательности, границы которой заданы параметрами start и end, возвращает количество элементов, для которых унарный предикат pfn возвращает значение true. Тип ptrdiff_t определяется как некоторая разновидность целочисленного типа.

Использование алгоритмов count() и count_if() демонстрируется в следующей программе.

/* Демонстрация использования алгоритмов count и count_if.

*/

#include

#include

#include

#include

using namespace std;

/* Это унарный предикат, который определяет, представляет ли данный символ гласный звук.

*/

bool isvowel(char ch)

{

 ch = tolower(ch);

 if(ch=='a' || ch=='e' || ch=='и' || ch=='o' || ch=='у' || ch=='ы' || ch=='я' || ch=='ё' || ch=='ю' || ch=='э')

  return true;

 return false;

}

int main()

{

 char str[] = "STL-программирование — это сила!";

 vector v;

 unsigned int i;

 for(i=0; str[i]; i++) v.push_back(str[i]);

 cout << "Последовательность: ";

 for(i=0; i

 cout << endl;

 int n;

 n = count (v.begin(), v.end(), 'м');

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги