Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 114; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.008 с.) |