АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Ассоциативные контейнеры

Читайте также:
  1. Контейнеры 20' типа «Hardtop» (с жесткой съемной крышей)
  2. Контейнеры с открытым верхом и боковой стенкой
  3. Контейнеры-рефрижераторы (refrigerated containers)
  4. Крупнотоннажные контейнеры.
  5. Рефрижераторные контейнеры, рефконтейнеры, Refrigerated Container
  6. Универсальные контейнеры 20' с открывающимся верхом
  7. Универсальные контейнеры для мелких грузов 20' (general purpose cotainers)

Класс mар создает ассоциативный контейнер, в котором каждому ключу соответствует единственное значение. По существу, ключ представляет собой имя, с помощью которого можно получить требуемое значение. Если в контейнере хранится некое значение, доступ к нему возможен только через ключ. Таким образом, ассоциативный контейнер фактически хранит пары ключ-значение. Преимущество ассоциативных массивов заключается в доступе к значениям по их ключам. Например, можно создать ассоциативный контейнер, в котором ключом является имя человека, а значением - номер его телефона. В настоящее время ассоциативные контейнеры получают все более широкое применение.

Как указывалось ранее, ассоциативные контейнеры могут содержать лишь уникальные ключи. Дубликаты не допускаются. Если необходимо создать ассоциативный контейнер, в котором можно хранить дубликаты, следует применять класс multiset

Шаблонная спецификация класса mар имеет следующий вид.

 

template <class Key, class T, class Ccmp = less<Key>, class Allocator = allocator<pair<const key,T> > class map

Здесь класс Key определяет тип ключа, шаблонный параметр Т задает тип данных, хранящихся в ассоциативном массиве, а функция Camp позволяет сравнивать два ключа. По умолчанию в качестве функции Camp применяется стандартный функтор less(). Распределитель памяти задается классом Allocator, причем по умолчанию используется стандартный класс allocator. Класс mар имеет следующие конструкторы.

 

explicit map (const Соmр &cmpfn=Comp(),//explicit-необяз

const Allocator &a= Allocator());

map (const map< Key, T, Сomp, Allocator> k&ob);

template <class InIter>list (InIter start, InIter end,

const Сomp &cmpfn = Comp(),

const Allocator &a = Allocator());

 

Первая версия конструктора создает пустой ассоциативный массив. Вторая — ассоциативный контейнер, содержащий элементы объекта ob. Третий вариант конструктора создает ассоциативный массив, состоящий из элементов, лежащих в диапазоне, заданном итераторами start и end. Функция cmpfn определяет порядок следования элементов массива.

Как правило, любой объект, использующийся в качестве ключа, должен определять конструктор по умолчанию, а также оператор "<" и другие операторы сравнения. Специфические требования, предъявляемые к ключам, зависят от компилятора.

Пример создания ассоциативного массива

 

map<char, int> m;

 

В классе mар определены следующие операторы сравнения:

 

==, <, <=,!=, >, >=

Некоторые функции-члены, определенные в классе mар, перечислены в табл. 4. В этой таблице класс key_type представляет собой тип ключа, а класс value_type определяет тип раir<Кeу,T>.

 

Таблица 4. Функции, определенные в классе mар

 

Функция-член Описание
iterator begin (); const_iterator begin () const; Возвращает итератор, установленный на первый элемент ассоциативного массива
void clear (); Удаляет из ассоциативного массива все элементы
size_type count (const key_type &k) const; Возвращает текущее количество дубликатов элемента со значением к в ассоциативном массиве  
bool empty() const; Возвращает значение true, если ассоциативный массив пуст, в противном случае возвращает значение false
iterator end(); const_iterator end() const; Возвращает итератор, установленный на первый элемент ассоциативного массива
void erase (iterator i); Удаляет элемент, на который ссылается итератор i. Возвращает итератор, установленный на элемент, следующий за удаленным
void erase(iterator staff, iterator end) Удаляет элементы из диапазона, заданного итераторами start и end. Возвращает итератор, установленный на элемент, следующий за последним удаленным  
size_type erase (const key_type &k); Удаляет из ассоциативного массива элементы, имеющие значение к  
iterator find(const key_type &k); const_iterator find(const key_type &k); Возвращает итератор, установленный на указанный ключ. Если ключ не найден, возвращается итератор, установленный на конец массива
iterator insert(iterator i, const value_type &val); Вставляет элемент со значением val на место или сразу после элемента, на который ссылается итератор i. Возвращается итератор, установленный на этот элемент
template <class inIter> void insert (Inlter start, Inlter end); pair<iterator,booi> insert (const value_type &val); Вставляет элементы из диапазона, зада иного итераторами start и end. Вставляет элемент со значением val в вызывающий ассоциативный контейнер. Возвращает итератор, ссылающийся на вставленный элемент. Элемент вставляется, только если его еще не было в ассоциативном массиве. В случае успеха возвращается объект класса pair<iterator,true>. В противном случае возвращается объект класса pair<iterator, falae>
mapped_type& operator [] (const key type &i); Возвращает ссылку на элемент, заданный итератором i. Если элемента в массиве не было, он вставляется туда  
size_type size() const; Возвращает текущее количество элементов вектора  

 

Пары ключ-значение хранятся в ассоциативном массиве как объекты типа pair. Его шаблонная спецификация имеет следующий вид.

 

template <сlass Ktype, class Vtype> struct pair {
typedef Ktype first_type; // Тип ключа


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)