Рефетека.ру / Информатика и програм-ие

Авторский материал: Индексирование

Индексирование

Чтобы задать смысл индексов для объектов класса используется функция operator[]. Второй параметр (индекс) функции operator[] может быть любого типа. Это позволяет определять ассоциативные массивы и т.п. В качестве примера давайте перепишем пример , где при написании небольшой программы для подсчета числа вхождений слов в файле применялся ассоциативный массив. Там использовалась функция. Здесь определяется надлежащий тип ассоциативного массива:

struct pair {

  char* name;

  int val;

};

class assoc {

  pair* vec;

  int max;

  int free;

public:

  assoc(int);

  int& operator[](char*);

  void print_all();

};

В assoc хранится вектор пар pair длины max. Индекс первого неиспользованного элемента вектора находится в free. Конструктор выглядит так:

assoc::assoc(int s)

{

  max = (s<16) ? s : 16;

  free = 0;

  vec = new pair[max];

}

При реализации применяется все тот же простой и неэффективный метод поиска. Однако при переполнении assoc увеличивается:

#include

int assoc::operator[](char* p)

/*

  работа с множеством пар "pair":

  поиск p,

  возврат ссылки на целую часть его "pair"

  делает новую "pair", если p не встречалось

*/

{

  register pair* pp;

  for (pp=&vec[free-1]; vec<=pp; pp--)

      if (strcmp(p,pp->name)==0) return pp->val;

  if (free==max) {    // переполнение: вектор увеличивается

      pair* nvec = new pair[max*2];

      for ( int i=0; iname = new char[strlen(p)+1];

  strcpy(pp->name,p);

  pp->val = 0;     // начальное значение: 0

  return pp->val;

}

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

vouid assoc::print_all()

{

  for (int i = 0; i>buf) vec[buf]++;

  vec.print_all();

}

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.realcoding.net


Похожие работы:

  1. • Компьютерная лингвистика
  2. • Создание таблиц. Индексирование таблиц
  3. • Информационно-поисковый тузаурус
  4. • Аналитический обзор книги "Программирование на языке ...
  5. • Математическое обеспечение комплекса задач ...
  6. • Патентная информация
  7. • Аналитический обзор книги Л. А. Левенталь, У. Сэйвилл ...
  8. • АРМ бухгалтера-расчетчика
  9. • АРМ бухгалтера-расчетчика
  10. • Информационно-поисковые системы на примере Рамблера
  11. • Стратегия поиска в автоматизированных информационных системах
  12. • Алгоритмы и организация данных
  13. • Использование электронной почты, Internet, и других систем в ...
  14. • Аналитический обзор книги "Программирование на языке ...
  15. • Методические рекомендации и задания для лабораторных работ по ...
  16. • Цифровая обработка графики
  17. • Использование электронной почты
  18. • Делопроизводство и ПК
  19. • Предмет и объект прикладной информатики
Рефетека ру refoteka@gmail.com