русс | укр

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

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


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


Множини і мультимножини


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


Множини часто використовують для збереження об’єктів класів користувачів. Але можна зберігати також об’єкти стандартних класів.

В програмі 15.28 продемонстрована множина, яка зберігає об’єкти класу string.

#include<iostream>

#include<set>

#include<string>

#include<conio>

using namespace std;

int main()

{string names[]={"Jane","Mary","Anne","Katy","Ruby"};

set<string,less<string> >nameSet(names,names+5);

set<string,less<string> >::iterator iter;

nameSet.insert("Yvette");

nameSet.insert("Rose");

nameSet.insert("Jane");//вставка елемента

nameSet.erase("Mary"); //видалення елемента

cout<<"\nRozmir="<<nameSet.size()<<endl;

iter=nameSet.begin();

while(iter!=nameSet.end())

cout<<*iter++<<endl;

string searchName;

cout<<"\nVvedit shukane imja: ";

cin>>searchName;

iter=nameSet.find(searchName);

if(iter==nameSet.end())

cout<<"Imja "<<searchName<<" vidsutne";

else

cout<<"Imja "<<*iter<<" najavne ";

cout<<endl;

getch();

return 0;

}

Програма 15.28

Для визначення множини необхідно вказати тип збережених в ній об’єктів. В нашому випадку це об’єкти класу string. До того ж, необхідно вказати функціональний об’єкт, який використовуватиметься для впорядкування елементів множини. тут ми використали less<>, застосовуючи його до рядкових об’єктів.

Як бачимо, множина має інтерфейс, схожий на інші контейнери STL. Ми можемо ініціалізувати множину масивом, вставляти дані методом insert(), виводити їх за допомогою ітераторів.

Для знаходження елементів ми використали метод find() (Послідовні контейнери мають однойменний алгоритм).

Основною перевагою асоціативних контейнерів порівняно з послідовними є швидкість пошуку.

Розглянемо досит важливу пару методів, які можна використовувати лише з асоціативними контейнерами: lower_bound та upper_bound().

//тестування роботи з діапазонами в множинах

#include<iostream>

#include<conio>

#include<set>

#include<string>

using namespace std;

int main()

{set<string, less<string> > organic;

set<string, less<string> >::iterator iter;

organic.insert("Curine");

organic.insert("Curarine");

organic.insert("Melanin");

organic.insert("Pherol");

organic.insert("Cianimid");

organic.insert("Aphrodine");

iter=organic.begin(); //виведення множини

while(iter!=organic.end())

cout<<*iter++<<'\n';

string lower,upper;//виведення значень з діапазону

cout<<"\nVvedit diapazon napr. A Z";

cin>>lower>>upper;

iter=organic.lower_bound(lower);

while(iter!=organic.upper_bound(upper))

cout<<*iter++<<'\n';

getch();

return 0;

}

 

Програма 15.29

Метод lower_bound() бере в якості аргументу значення того ж типу, що й ключ. Він повертає ітератор, що вазує на перший запис множинип, значення якого не менше за аргумент (що означає «не менше» в кожному конкретному випадку використовується конкретним функціональним об’єктом, що використовується при визначенні множини). Функція upper_bound() повертає ітератор, що вказує на елемент, значення якого більше, ніж аргумент. Обидві ці функції дозволяють задавати діапазон значинь в контейнері.

 


<== попередня лекція | наступна лекція ==>
Асоціативні контейнери | Відображення та мультивідображення


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