АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Ассоциативный массив, содержащий объекты

Читайте также:
  1. IV. Определение массы вредных (органических и неорганических) веществ, сброшенных в составе сточных вод и поступивших иными способами в водные объекты
  2. В) учетный документ, содержащий перечень документов дела с указанием их порядковых номеров, индексов, названий, дат, номеров листов
  3. Вектор, содержащий объекты класса
  4. ВОДНЫЕ ОБЪЕКТЫ. ОЦЕНКА ВОДНЫХ ОБЪЕКТОВ ДЛЯ ПЛЯЖНО-КУПАЛЬНОГО ОТДЫХА. МЕТЕОРОЛОГИЧЕСКИЕ УСЛОВИЯ КУПАНИЯ
  5. Воздействие опт-го изл-я на биологические объекты.
  6. Вопрос:Экологический мониторинг.Основные объекты.
  7. Заражаемые объекты.
  8. Значение, задачи и объекты анализа себестоимости продукции
  9. Лес и растительный мир вне лесов как объекты правовой охраны
  10. Лицензирование природопользования: понятие, объекты, правовые основы
  11. Налог на игорный бизнесс: плательщики, объекты обложения, ставки, льготы, порядок исчисления и уплаты в бюджет

Как и любой другой контейнер, ассоциативный массив можно использовать для хранения объектов классов, определенных программистом. Например, следующая программа создает простую телефонную книжку. Иначе говоря, она создает ассоциативный массив имен, связанных с номерами. Для этого используются два класса с именами name и number. Поскольку ассоциативный массив хранит упорядоченный список ключей, в программе определяется оператор "<" для сравнения объектов класса name. Как правило, оператор "<" необходимо определять в любом классе, объекты которого используются в качестве ключей. (Некоторые компиляторы требуют, чтобы в таких классах были определены дополнительные операторы сравнения.)

 

// Применение ассоциативного массива

// для создания телефонной книжки.

#include <iostream>

#include <map>

#include <cstring>

using namespace std;

//создаем класс name, в котором будет хранится имя

class name {

char str[40];

public:

name() { strcpy(str, "");}

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

char *get() { return str; }

};

// Определяем оператор < для объектов класса name.

bool operator<(name a, name b)

{

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

}

// Другой класс для телефонных номеров

class phoneNum{

char str[40];

public:

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

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

char *get() { return str; }

};

int main(){

system("chcp 1251");

cout<<endl;

map<name, phoneNum> directory;

// Заносим парами имена и номера в ассоциативный массив,

directory.insert(pair<name, phoneNum>(name("Иванов"),phoneNum("123-4567")));

directory.insert(pair<name, phoneNum>(name("Петров"),phoneNum("123-4578")));

directory.insert(pair<name, phoneNum>(name("Сидоров"),phoneNum("125-8195")));

directory.insert(pair<name, phoneNum>(name("дядя_Петя"),phoneNum("225-0809")));

// Находим номер телефона по указанному имени.

char str[80];

cout << "Введите имя: ";

cin >> str;

map<name, phoneNum>::iterator p;

p = directory.find(name(str));

if(p!= directory.end())

cout << "Номер телефона: " << p->second.get()<<endl;

Else

cout <<"Такого имени в книжке нет.\n";

system("pause");

return 0;

}

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

Следует напомнить, что функция strcmp(str1,str2) сравнивает строки. Точнее поочередно сравниваются коды символов двух строк. Если они совпадают, возвращает 0. Если значение кода символа str1 меньше str2, возвращает отрицательное число. Если значение кода символа str1 больше str2, возвращает положительное число.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)