русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Множина об’єктів person


Дата додавання: 2014-04-22; переглядів: 1108.


Почнемо обговорення з класу 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() повинні відповідати саме вказаним значенням.

 


<== попередня лекція | наступна лекція ==>
Збереження об’єктів користувача | Список об’єктів класу person


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн