Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Збереження об’єктів користувача
Досі ми в наших прикладах зберігали об’єкти базових типів. Між тим, однією з переваг STL є те, що об’єкти типів користувача також є повноправними даними, які можна зберігати і над якими можна виконувати ті самі операції.
Множина об’єктів person Почнемо обговорення з класу person, в якому містяться прізвища, імена та телефони людей. Ми створюватимемо компонети цього класу і вставлятимемо їх у множину, заповнюючи тим самим віртуальну телефонну книжку. Користувач взаємодіє з програмою, вводячи ім’я людини. На екран виводиться результат пошуку даних, що відповідає вказаному імені. Використаємо для розв’язку цієї задачі мультимножину, щоб два і більше об’єкти person могли мати одинакові імена. #include<iostream> #include<conio> #include<set> #include<string> using namespace std; class person{ private: string lastName; string firstName; long phoneNumber; public: person():lastName("__"),firstName("__"),phoneNumber(0) { } person(string lana,string fina,long pho): lastName(lana),firstName(fina),phoneNumber(pho) { } friend bool operator<(const person&,const person&); friend bool operator==(const person&,const person&);
void display() const {cout<<endl<<lastName<<" "<<firstName<<" "<<phoneNumber; } };
bool operator<(const person& p1, const person& p2) {if (p1.lastName==p2.lastName) return (p1.firstName<p2.firstName?true:false); else return (p1.lastName<p2.lastName?true:false); };
bool operator==(const person& p1, const person& p2) {return(p1.lastName==p2.lastName && p1.firstName==p2.firstName? true:false); }; ////////////
int main() { person pers1("Bonnie","Essa",323456); person pers2("Billi","Emma",323457); person pers3("Mappy","Etta",323450); person pers4("Asta","Esta",323451); person pers5("Catti","Enna",3234551); person pers6("Lucy","Ecca",323458); person pers7("Unny","Ewwa",323453); person pers8("Rony","Erra",323459);
multiset<person, less<person> >persSet; //мультимножина класу person multiset<person, less<person> >::iterator iter; persSet.insert(pers1); //занести обєкти person в мультимножину persSet.insert(pers2); persSet.insert(pers3); persSet.insert(pers4); persSet.insert(pers5); persSet.insert(pers6); persSet.insert(pers7); persSet.insert(pers8); cout<<"\nChyslo zapysiv: "<<persSet.size(); iter=persSet.begin(); while(iter!=persSet.end()) (*iter++).display(); string searchLastName,searchFirstName; cout<<"\n\nVvedit prizvywe "; cin>>searchLastName; cout<<"\n\nVvedit imiae "; cin>>searchFirstName; //створення обєкту з заданими значеннями атрибутів person searchPerson(searchLastName,searchFirstName,0); //порахувати к-сть людей з таким іменем int cntPersons=persSet.count(searchPerson); cout<<"4yslo ludej z imenem "<<cntPersons; //вивести всі запити, що відповідають запиту
iter=persSet.lower_bound(searchPerson); while(iter!=persSet.upper_bound(searchPerson)) (*iter++).display(); cout<<endl; getch(); return 0; }
Програма 15.31 Для роботи з контейнерами STL класу person потрібно кілька загальних методів. Вони являють собою конструктори без аргументів та з аргументами, перезавантажені операції < i ==. Всі ці методи використовуються списковим класом та різними алгоритмами. В інших операціях можуть знадобитися якісь інші специфічні методи, наприклад, перезавантажена операція присвоєння, конструктор копіювання і деструктор. Перезавантажені операції < i == повинні мати констатні параметри. Загалом краще їх зробити дружніми, але і у вигляді звичайних методів вони повністю підходять для роботи. Перезавантажена операція < задає порядок сортування елементів множини. В нас вона визначена таким чином, щоб сортувалися прізвища, а у випадку їх співпадіння – ще й імена. Щойно визначивши клас, ми дістали можливість роботи контейнера з ним тими ж способами, що й зі звичайними змінними базових типів. Оскільки ми маємо справу з мультимножиною, методи lower_bound() та upper_bound() дають можливість виводити всі елементи, що входять у заданий діапазон. В нашому прикладі верхня границя співпадає з нижньою, тому просто виводяться всі записи, що містять дані про людей із заданим іменем. звернімо увагу, що ми створюємо фіктивний запис з даними про людину чи кількох людей з тими ж іменами, які користувач вказав у запиті person searchPerson(searchLastName,searchFirstName,0); При цьому значення функцій lower_bound() і upper_bound() повинні відповідати саме вказаним значенням.
|
|||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 59; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.15.149 (0.007 с.) |