Инструменты пользователя

Инструменты сайта


klass_map

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

klass_map [2011/02/21 15:39]
klass_map [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== Класс map ======
 +Класс map поддерживает поддерживает ассоциативный контейнер (т.е. ключ может быть строкой), в котором уникальным ключам соответствуют определённые значения.
 +Этот класс предназначен для быстрого поиска значения по ключу. В качестве ключа может быть использовано все, что угодно, но при этом необходимо помнить, что главной особенностью ключа является возможность применить к нему операцию сравнения. Быстрый поиск значения по ключу осуществляется благодаря тому, что пары хранятся в отсортированном виде. Этот класс имеет недостаток - скорость вставки новой пары обратно пропорциональна количеству элементов, сохраненных в классе. Еще один важный момент - ключ должен быть уникальным.
  
 +Спецификация его шаблона имеет следующий вид:
 +<file>
 +template <class Key, class T, class Comp = less<key>,
 +class Allocator =Allocator<pair<const key, T>>>
 +class map
 +</file>
 +Здесь key - тип данных ключей,T - тип сохраняемых (отображемых)значений, а Comp - функция, которая сравнивает два ключа. Класс map имеет следующие конструкторы:
 +
 +<file>
 +explicit map(const Comp &cmpfn = Comp(),Allocator &a = Allocator());
 +
 +map(map<Key, T, Comp,Allocator> &ob);
 +
 +template < class InIter> map(InIter start, InIter end,const Comp &cmpfn = Comp(),
 + const Allocator &a = Allocator());
 +</file>
 +
 +Первая форма конструктора создает пустое отображение. Вторая создает отображение, которое содержит те же элементы, что и отображение ob. Третья создает отображение, которое содержит элементы в диапазоне, заданном параметрами start и end. Функция, заданная параметром cmpfn (и если она задана), определяет упорядочение отображения.
 +
 +Для класса map определены следующие операторы сравнения:
 +
 +<file>
 +== 
 +
 +<= 
 +!= 
 +
 +>=
 +</file>
 +====== Функции-члены ======
 +Класс map содержит перечисленные ниже функции-члены. В приведенных описаниях элемент key_type представляет тип ключа, а элемент value_type - пару элементов pair<Key, T>.
 +
 +
 +iterator begin();
 +
 +const_iterator begin() const;
 +Возвращает итератор для первого элемента в отображении.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +void clear();
 +
 +Удаляет все элементы из отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +size_type count(const key_type &k) const;
 +
 +Возвращает число вхождений ключа k в отображении (1 или 0).
 +
 +
 +--------------------------------------------------------------------------------
 +
 +bool empty() const;
 +
 +Возвращает значение true, если данное отображение пустое, и false в противном случае.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +const_iterator end() const;
 +
 +iterator end();
 +
 +Возвращает итератор, указывающий на конец отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +pair<iterator, iterator> equal_range(const key_type &k);
 +
 +pair<const_iterator, const_iterator> equal_range(const key_type &k) const;
 +
 +Возвращает пару итераторов, которые указывают на первый и последний элементы в отображении, содержащие заданный ключ.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +void erase(iterator i);
 +
 +Удаляет элемент, адресуемый итератором i.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +void erase(iterator start, iterator end);
 +
 +Удаляет элементы в диапазоне, задаваемом параметрами start и end.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +size_type erase(const key_type &k);
 +
 +Удаляет из отображения элементы, ключи которых имеют значение k.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +iterator find(const key_type &k);
 +
 +const_iterator find(const key_type &k) const;
 +
 +Возвращает итератор для заданного ключа. Если ключ не обнаружен, возвращает итератор до конца отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +allocator_type get_allocator() const;
 +
 +Возвращает распределитель отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +iterator insert(iterator i, const value_type &val);
 +
 +Вставляет значение val после элемента, заданным итератором i, возвращает итератор для этого элемента.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +template <class InIter> void insert(InIter start, InIter end);
 +
 +Вставляет элементы заданного диапазона.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +pair<iterator, bool> insert(const value_type &val);
 +
 +Вставляет значение val в используемое отображение. Возвращает итератор для данного отображения. Элемент вставляет только в том случае, если его еще нет в отображении. Если элемент был вставлен возвращает пару pair<iterator, true>, в противном случае pair<iterator, false>
 +
 +
 +--------------------------------------------------------------------------------
 +
 +key_compare key_comp() const;
 +
 +Возвращает объект-функцию, которая сравнивает ключи.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +iterator lower_bound(const key_type &k);
 +
 +const_iterator lower_bound(const key_type &k) const;
 +
 +Возвращает итератор для первого элемента в отображении, ключ которого равен значению k или больше этого значения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +size_type max_size() const;
 +
 +Возвращает максимальное число элементов, которое может содержать отображение.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +reference operator[](const key_type &i);
 +
 +Возвращает ссылку на элемент, заданный параметром i. Если этого элемента не существует, вставляет его в отображение.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +reverse_iterator rbegin();
 +
 +const_reverse_iterator rbegin() const;
 +
 +Возвращает реверсивный итератор для конца отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +reverse_iterator rend();
 +
 +const_reverse_iterator rend() const;
 +
 +Возвращает реверсивный итератор для начала отображения.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +size_type size() const;
 +
 +Возвращает текущее количество элементов в отображении.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +void swap(map<Key, T, Comp, Allocator> &ob);
 +
 +Выполняет обмен элементами данного отображения и отображения ob.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +iterator upper_bound(const key_type &k);
 +
 +const_iterator upper_bound(const key_type &k) const;
 +
 +Возвращает итератор для первого элемента в отображении, ключ которого больше заданного значения k.
 +
 +
 +--------------------------------------------------------------------------------
 +
 +value_compare value_comp() const;
 +Возвращает объект-функцию, которая сравнивает значения.
 +====== Пример. Key string ======
 +<file>
 +#include <iostream>
 +#include <vector>
 +#include <map>
 +
 +using namespace std;
 +
 +int main(){
 +    const int SIZE=20;
 + typedef pair <int, int> Int_Pair;
 + map <int, int>::iterator m1_Iter;
 +
 +   map <int, int, less<int> > m1;
 +   m1.insert( Int_Pair( 1, 10 ) );
 +   m1.insert( Int_Pair( 2, 20 ) );
 +   m1.insert( Int_Pair( 3, 30 ) );
 +   m1.insert( Int_Pair( 4, 40 ) );
 +   m1.insert( Int_Pair( 9, 80 ) );
 +   m1.insert( Int_Pair( 9, 90 ) );
 +   //insert принимает ТИП, то есть ему нужно создать пару ключ -значение
 +   m1.insert( pair<int,int>( 5, 50 ) );
 +
 +   cout << "m1 =\n";
 +   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ){
 +    cout << " first " << m1_Iter->first<<" second "<<m1_Iter -> second<<"\n";
 +      }
 +   //key STROKA
 +   cout << endl;
 +   cout << "key STROKA"<< endl;
 +
 +   map <char*, int > m2;
 +   map <char*, int>::iterator m2_Iter;
 +   char str[] = "test key stroka string";
 +   m2.insert( pair<char*,int>( str, 777 ) );
 +   for ( m2_Iter = m2.begin( ); m2_Iter != m2.end( ); m2_Iter++ ){
 +    cout << " first " << m2_Iter->first<<"\n";
 +    cout << " " << m2_Iter -> second;
 +   }
 +   cout << endl;
 +
 + return 0;
 +}
 +</file>