|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Ассоциативный массив, содержащий объектыКак и любой другой контейнер, ассоциативный массив можно использовать для хранения объектов классов, определенных программистом. Например, следующая программа создает простую телефонную книжку. Иначе говоря, она создает ассоциативный массив имен, связанных с номерами. Для этого используются два класса с именами 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, возвращает положительное число. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |