Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

Void main()

{

mp ob;

str struc;

struc.a = 100;

struc.dd = "aaa";

int num;

for(int i=1; i<5;i++)

{

struc.a = 100*i;

struc.dd += (char)(i+65);

ob[i] = struc;

}

mp::iterator it;

for( it = ob.begin(); it != ob.end(); it++)

cout <<(*it).first<<" "<<((*it).second).a <<

" "<<((*it).second).dd << endl;

it = ob.begin(); it++; // Вывод второго элемента

cout << "2 - element: ";

cout<<(*it).first <<" "<<((*it).second).dd<<endl;

str vs;

vs.a = 88;

vs.dd = "TTT";

ob.insert(make_pair(200,vs));

for( it = ob.begin(); it != ob.end(); it++)

cout <<(*it).first <<" "<<((*it).second).a

<< " "<<((*it).second).dd << endl;

}

Результат роботи програми:

1 100 aaaB

2 200 aaaBC

3 300 aaaBCD

4 400 aaaBCDE

2 - element: 2 aaaBC

1 100 aaaB

2 200 aaaBC

3 300 aaaBCD

4 400 aaaBCDE

200 88 TTT

10.3.3 Множини (set)

Множина – це асоціативний контейнер, що містить тільки значення ключів, тобто тип value_type відповідає типу Кеу. Значення ключів мають бути унікальні. Шаблон множини має два параметри: тип ключа і тип функціонального об'єкту, що визначає відношення "менше":

template <class Key, class Compare = less<Key> >

class set

{

public:

typedef Key key_type;

typedef Key value_type;

explicit set(const Compare& comp = Compare());

template <class InputIter>

set(InputIter first, InputIter last,

const Compare& comp = Compare());

set(const set<Key, Compare>& x);

pair<iterator,bool> insert(const value_type& x);

iterator insert(iterator position,const value_type&x);

template <class InputIter>

void insert(InputIter first , InputIter last);

void erase(iterator position);

size_type erase(const key_type& x);

void erase(iterator first , iterator last);

void swap(set<Key, Compare>&);

void clear();

iterator find(const key_type& x) const;

size_type count(const key_type& x) const;

iterator lower_bound(const key_type& x) const;

iterator upper_bound(const key_type& x) const;

pair<iterator.iterator> equal_range

(const key_type& x) const;

...

}

З опису, приведеного з скороченнями, видно, що інтерфейс множини аналогічний інтерфейсу словника. Нижче приведений простий приклад, в якому створюється множина цілих чисел:

#include <iostream>

#include <set>

using namespace std;

typedef set<int,less<int> > seti;

seti::iterator i;

Void main()

{

int a[4] = {4,2,1,2};

// Створюється порожня множина

seti s1;

// Множина створюється копіюванням масиву

seti s2(a, a + 4);

seti s3(s2);// Працює конструктор копіювання

s2.insert(10);// Вставка елементів

s2.insert(6);

for ( i = s2.begin(); i != s2.end();i++)

cout << *i << " " ;

cout << endl;

// Змінна для зберігання результату equal_range;

pair <seti::iterator, seti::iterator > p;

p = s2.equal_range(2);

cout << *(p.first) <<" "<< *(p.second) << endl;

p = s2.equal_range(5);

cout << *(p.first) <<" "<< *(p.second) << endl;

}

Результат роботи програми:

1 2 4 6 10

2 4

6 6

Як і для словника, елементи в множині зберігаються відсортованими. Елементи, що повторюються, в множину не заносяться.

Приведена нижче програма формує для заданого текстового файлу вказівку, тобто впорядкований за абеткою список слів, що зустрічаються в ньому, для кожного з яких показані номери рядків, що містять це слово. Якщо слово зустрічається в рядку більше одного разу, номер рядка виводиться один раз.

#include <iostream>

#include <fstream>

#include <iomanip>

#include <string>

#include <set>

#include <map>

using namespace std;

typedef set<int, less<int> > set_i;

typedef map<string, set_i, less<string> > map_ss;

bool wordread (ifstream &in,string &word, int &num)

{

char ch;

// Пропуск до першої букви:

for (;;)

{

in.get(ch);

if (in.fail()) return false;

if (isalpha(ch) || ch == '_') break;

if (ch == '\n') num++;

}

word = "";

// Пошук кінця слова:

do

{

word += tolower(ch);

in.get(ch);

}

while (!in.fail() && (isalpha(ch) || ch == '_'));

if (in.fail()) return false;

in.putback(ch); // Якщо символ – '\n'

return true;

}