Здавалка
Главная | Обратная связь

Асоціативні контейнери (масиви)



Асоціативний масив містить пари значень. Знаючи одне значення, що називається ключем (key), ми можемо одержати доступ до іншого, oj yfpbdf’nmcz відображеним значенням (mapped value).

Асоціативний масив можна представити як масив, для якого індекс не обов'язково повинний мати цілочисельний тип:

V& operator[](const K&) повертає посилання на V, що відповідає K.

Асоціативні контейнери – це узагальнення поняття асоціативного масиву.

Асоціативний контейнер map - це послідовність пар (ключ, значення), що забезпечує швидке одержання значення за ключем. Контейнер map надає двонаправлені ітератори.

Асоціативний контейнер map вимагає, щоб для типів ключа існувала операція “<”. Він зберігає свої елементи відсортованими за ключем так, що перебір відбувається один по одному.

Специфікація шаблона для класу map:

template<class Key,class,class Comp=less<Key>,class Allocator=allocator<pair> >

class std::map

У класі map визначені наступні конструктори:

explicit map(const Comp& c=Comp(),const Allocator& a=Allocator());

map(const map<Key,T,Comp,Allocator>& ob);

template<class InIter> map(InIter first,InIter last,const Comp& c=Comp(),const Allocator& a=Allocator());

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

Визначено операцію присвоювання:

map& operator=(const map&);

Визначено наступні операції: ==, <, <=, !=, >, >=.

У map зберігаються пари ключ/значення у виді об'єктів типу pair.

Створювати пари ключ/значення можна не тільки за допомогою конструкторів класу pair, але і за допомогою функції make_pair, що створює об'єкти типу pair, використовуючи типи даних як параметри.

Типова операція для асоціативного контейнера – це асоціативний пошук за допомогою операції індексації([]).

mapped_type& operator[](const key_type& K);

Множини setможна розглядати як асоціативні масиви, у яких значення не грають ролі, так що ми відслідковуємо тільки ключі.

template<class,class Cmp=less<T>,class Allocator=allocator<T>>class std::set{...};

Множину, як і асоціативний масив, вимагає, щоб для типу T існувала операція “менше” (<). Воно зберігає свої елементи відсортованими, так що перебір відбувається один по одному.

Алгоритми

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

Алгоритми визначені в заголовному файлі <algorithm.h>.

Нижче приведені імена деяких найбільше часто користуємих функцій-алгоритмів STL.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.