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

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


klass_map

Различия

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

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

klass_map [2011/02/21 07:39] (текущий)
Строка 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>​
загрузка...
klass_map.txt · Последние изменения: 2011/02/21 07:39 (внешнее изменение)