🗊Презентация Ассоциативные контейнеры. (Лекция 5)

Нажмите для полного просмотра!
Ассоциативные контейнеры. (Лекция 5), слайд №1Ассоциативные контейнеры. (Лекция 5), слайд №2Ассоциативные контейнеры. (Лекция 5), слайд №3Ассоциативные контейнеры. (Лекция 5), слайд №4Ассоциативные контейнеры. (Лекция 5), слайд №5Ассоциативные контейнеры. (Лекция 5), слайд №6Ассоциативные контейнеры. (Лекция 5), слайд №7Ассоциативные контейнеры. (Лекция 5), слайд №8Ассоциативные контейнеры. (Лекция 5), слайд №9Ассоциативные контейнеры. (Лекция 5), слайд №10Ассоциативные контейнеры. (Лекция 5), слайд №11Ассоциативные контейнеры. (Лекция 5), слайд №12Ассоциативные контейнеры. (Лекция 5), слайд №13Ассоциативные контейнеры. (Лекция 5), слайд №14Ассоциативные контейнеры. (Лекция 5), слайд №15Ассоциативные контейнеры. (Лекция 5), слайд №16Ассоциативные контейнеры. (Лекция 5), слайд №17Ассоциативные контейнеры. (Лекция 5), слайд №18Ассоциативные контейнеры. (Лекция 5), слайд №19Ассоциативные контейнеры. (Лекция 5), слайд №20Ассоциативные контейнеры. (Лекция 5), слайд №21Ассоциативные контейнеры. (Лекция 5), слайд №22Ассоциативные контейнеры. (Лекция 5), слайд №23Ассоциативные контейнеры. (Лекция 5), слайд №24Ассоциативные контейнеры. (Лекция 5), слайд №25Ассоциативные контейнеры. (Лекция 5), слайд №26Ассоциативные контейнеры. (Лекция 5), слайд №27Ассоциативные контейнеры. (Лекция 5), слайд №28Ассоциативные контейнеры. (Лекция 5), слайд №29Ассоциативные контейнеры. (Лекция 5), слайд №30

Содержание

Вы можете ознакомиться и скачать презентацию на тему Ассоциативные контейнеры. (Лекция 5). Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Ассоциативные контейнеры
Описание слайда:
Ассоциативные контейнеры

Слайд 2





Введение в ассоциативные контейнеры 
     Для реализации последовательных контейнеров (массивов, векторов, двусторонних очередей и списков) используются массивы и списки. Кроме этого применяются сбалансированные деревья, предназначенные для их эффективного хранения и извлечения. 
    Сбалансированные деревья составляют основу для другой группы контейнеров, определенной в STL, так называемых (сортированных) ассоциативных контейнеров.
Описание слайда:
Введение в ассоциативные контейнеры Для реализации последовательных контейнеров (массивов, векторов, двусторонних очередей и списков) используются массивы и списки. Кроме этого применяются сбалансированные деревья, предназначенные для их эффективного хранения и извлечения. Сбалансированные деревья составляют основу для другой группы контейнеров, определенной в STL, так называемых (сортированных) ассоциативных контейнеров.

Слайд 3





Cбалансированные деревья
     Бинарное дерево называется сбалансированным или АВЛ-деревом, если для любой вершины дерева, высоты левого и правого поддеревьев отличаются не более чем на единицу. Показатель сбалансированности бинарного дерева, равный  +1, 0, -1,означает соответственно: правое поддерево выше, они равной высоты, левое поддерево выше.
     М. Адельсон-Вельский и Е.М. Ландис доказали, что при таком определении можно написать программы добавления/удаления, имеющие логарифмическую сложность и сохраняющие дерево сбалансированным.
Описание слайда:
Cбалансированные деревья Бинарное дерево называется сбалансированным или АВЛ-деревом, если для любой вершины дерева, высоты левого и правого поддеревьев отличаются не более чем на единицу. Показатель сбалансированности бинарного дерева, равный +1, 0, -1,означает соответственно: правое поддерево выше, они равной высоты, левое поддерево выше. М. Адельсон-Вельский и Е.М. Ландис доказали, что при таком определении можно написать программы добавления/удаления, имеющие логарифмическую сложность и сохраняющие дерево сбалансированным.

Слайд 4





Типы ассоциативных контейнеров
    Всего существует 5 типов этих контейнеров: 
множества (sets), 
множества с дубликатами (multisets), 
словари (maps), 
словари с дубликатами (multimaps),
битовые множества (bitset). 
     Множества – sets
     Каждый элемент множества является собственным ключом, и эти ключи уникальны. Поэтому два различных элемента множества не могут совпадать. Например, множество может состоять из следующих элементов:
123    124    800    950
Описание слайда:
Типы ассоциативных контейнеров Всего существует 5 типов этих контейнеров: множества (sets), множества с дубликатами (multisets), словари (maps), словари с дубликатами (multimaps), битовые множества (bitset). Множества – sets Каждый элемент множества является собственным ключом, и эти ключи уникальны. Поэтому два различных элемента множества не могут совпадать. Например, множество может состоять из следующих элементов: 123 124 800 950

Слайд 5





Множества и словари
      Множества с дубликатами – multisets
     Множество с дубликатами отличается от просто множества только тем, что способно содержать несколько совпадающих элементов. 
123    123    800    950
     Словари – maps  
     Каждый элемент словаря имеет несколько членов, один из которых является ключом. В словаре не может быть двух одинаковых ключей. 
123       John
124       Mary
800       Alexander   
950       Jim
 
Описание слайда:
Множества и словари Множества с дубликатами – multisets Множество с дубликатами отличается от просто множества только тем, что способно содержать несколько совпадающих элементов. 123 123 800 950   Словари – maps Каждый элемент словаря имеет несколько членов, один из которых является ключом. В словаре не может быть двух одинаковых ключей. 123 John 124 Mary 800 Alexander 950 Jim  

Слайд 6





Множества и словари
    Словари с дубликатами – multimaps 
Словарь с дубликатами отличается от просто словаря тем, что в нем разрешены повторяющиеся ключи. 
123       John
123       Mary
800       Alexander   
950       Jim
     В отличие от последовательных контейнеров ассоциативные контейнеры хранят свои элементы отсортированными, вне зависимости от того, каким образом они были добавлены.
Описание слайда:
Множества и словари Словари с дубликатами – multimaps Словарь с дубликатами отличается от просто словаря тем, что в нем разрешены повторяющиеся ключи. 123 John 123 Mary 800 Alexander 950 Jim В отличие от последовательных контейнеров ассоциативные контейнеры хранят свои элементы отсортированными, вне зависимости от того, каким образом они были добавлены.

Слайд 7





Примеры
    //  set.cpp: Два идентичных множества,
    //  созданных разными способами.
#include <iostream> 
#include <set> 
using namespace  std;
int set1()
{    set<int, less<int> > S, T;
S.insert(10);  S.insert(20);  S.insert(30); S.insert (10);
T.insert (20);  T.insert (30);  T.insert (10);
if (S == T) cout << "Equal sets, containing:\n";
for (set<int,  less<int> >::iterator i = T.begin();
       i != T.end(); i++) 
       cout << *i << " ";          // Результат:
cout << endl;                      Equal sets, containing: 
return 0;                              10 20 30
}
Описание слайда:
Примеры // set.cpp: Два идентичных множества, // созданных разными способами. #include <iostream> #include <set> using namespace std; int set1() { set<int, less<int> > S, T; S.insert(10); S.insert(20); S.insert(30); S.insert (10); T.insert (20); T.insert (30); T.insert (10); if (S == T) cout << "Equal sets, containing:\n"; for (set<int, less<int> >::iterator i = T.begin(); i != T.end(); i++) cout << *i << " "; // Результат: cout << endl; Equal sets, containing: return 0; 10 20 30 }

Слайд 8





Замечания
    Порядок чисел 20, 30, 10, в котором были добавлены элементы Т, несущественен; равным образом множество S не изменяет добавление элемента 10 во второй раз. 
    Ключи уникальны во множествах, но могут повторяться во множествах с дубликатами.
    Определение S и Т:
set<int, less<int> > S, Т;  // > > разделены пробелом
Предикат  less<int>  требуется  для  определения  упорядочения значения  выражения k1 < k2 , 
где k1 и k2 являются ключами. 
    Хотя множества и не являются последовательностями, мы можем применять к ним итераторы и функции begin() и end(). Данные итераторы являются двунаправленными.
Описание слайда:
Замечания Порядок чисел 20, 30, 10, в котором были добавлены элементы Т, несущественен; равным образом множество S не изменяет добавление элемента 10 во второй раз. Ключи уникальны во множествах, но могут повторяться во множествах с дубликатами.   Определение S и Т: set<int, less<int> > S, Т; // > > разделены пробелом Предикат less<int> требуется для определения упорядочения значения выражения k1 < k2 , где k1 и k2 являются ключами. Хотя множества и не являются последовательностями, мы можем применять к ним итераторы и функции begin() и end(). Данные итераторы являются двунаправленными.

Слайд 9





Таблица операций, применимых к итераторам
х - переменная того же типа, что и элементы рассматриваемого контейнера, а n – int.
Описание слайда:
Таблица операций, применимых к итераторам х - переменная того же типа, что и элементы рассматриваемого контейнера, а n – int.

Слайд 10


Ассоциативные контейнеры. (Лекция 5), слайд №10
Описание слайда:

Слайд 11





Примеры работы со словарями
    Происхождение термина «ассоциативный контейнер» становится ясным, когда начинаем рассматривать словари. Например, телефонный справочник связывает (ассоциирует) имена с номерами. Имея заданное имя или ключ, нужно узнать соответствующий номер. Т.е., телефонная книга является отображением имен на числа.
    Если имя Johnson, J. соответствует номеру 12345, STL позволяет определить словарь D, ->   D["Johnson, J."]  = 12345;
    Это означает: 
"Johnson, J."   ->  12345
Описание слайда:
Примеры работы со словарями Происхождение термина «ассоциативный контейнер» становится ясным, когда начинаем рассматривать словари. Например, телефонный справочник связывает (ассоциирует) имена с номерами. Имея заданное имя или ключ, нужно узнать соответствующий номер. Т.е., телефонная книга является отображением имен на числа. Если имя Johnson, J. соответствует номеру 12345, STL позволяет определить словарь D, -> D["Johnson, J."] = 12345; Это означает: "Johnson, J." -> 12345

Слайд 12


Ассоциативные контейнеры. (Лекция 5), слайд №12
Описание слайда:

Слайд 13


Ассоциативные контейнеры. (Лекция 5), слайд №13
Описание слайда:

Слайд 14





Замечания
    Программа mар1.срр содержит определенный нами функциональный объект compare2.
    Определение  map<char*, long, compare2> D; 
справочника D содержит следующие параметры шаблона:
тип ключа char*;
тип сопутствующих данных long;
класс функционального объекта compare2.  
    Функция-член operator() класса compare2 определяет отношение меньше для ключей.
Описание слайда:
Замечания Программа mар1.срр содержит определенный нами функциональный объект compare2. Определение map<char*, long, compare2> D; справочника D содержит следующие параметры шаблона: тип ключа char*; тип сопутствующих данных long; класс функционального объекта compare2. Функция-член operator() класса compare2 определяет отношение меньше для ключей.

Слайд 15





Примеры: словари с дубликатами
    // multimap1.cpp: Множество с дубликатами, 
    // содержащее одинаковые ключи. 
#include <iostream> 
#include <string> 
#include <map> 
using namespace std; 
class compare3 
{
public: 
bool operator() (const char *s, const char *t) const
{  return strcmp(s, t) < 0;
}
};
Описание слайда:
Примеры: словари с дубликатами // multimap1.cpp: Множество с дубликатами, // содержащее одинаковые ключи. #include <iostream> #include <string> #include <map> using namespace std; class compare3 { public: bool operator() (const char *s, const char *t) const { return strcmp(s, t) < 0; } };

Слайд 16


Ассоциативные контейнеры. (Лекция 5), слайд №16
Описание слайда:

Слайд 17





Замечания
    Оператор доступа по индексу [ ] не определен для множеств с дубликатами, поэтому нельзя добавить элемент, написав, к примеру:
D["Johnson, J."] = 12345;
Вместо этого напишем:
D.insert (mmtype::value_type ("Johnson, J.", 12345)); 
где mmtype на самом деле означает:
multimap<char*,  long,  compare3>
    Так как идентификатор value_type определен внутри шаблонного класса multimap, перед value_type здесь требуется написать префикс mmtype::. Определение идентификатора value_type основано на шаблоне pair.
Описание слайда:
Замечания Оператор доступа по индексу [ ] не определен для множеств с дубликатами, поэтому нельзя добавить элемент, написав, к примеру: D["Johnson, J."] = 12345; Вместо этого напишем: D.insert (mmtype::value_type ("Johnson, J.", 12345)); где mmtype на самом деле означает: multimap<char*, long, compare3> Так как идентификатор value_type определен внутри шаблонного класса multimap, перед value_type здесь требуется написать префикс mmtype::. Определение идентификатора value_type основано на шаблоне pair.

Слайд 18





Алгоритмы работы с ассоциативными контейнерами
    includes – выполняет проверку включения одной последовательности в другую. Результат равен true в том случае, когда каждый элемент первой последова­тельности содержится во второй последовательности.
    set_intersection – создаёт отсортированное пересечение множеств, то есть множество, содержащее только те элементы, которые одновременно входят и в первое, и во второе множество.
    set_difference  – создание отсортированной последовательности элементов, входящих только  в первую из двух последовательностей.
Описание слайда:
Алгоритмы работы с ассоциативными контейнерами includes – выполняет проверку включения одной последовательности в другую. Результат равен true в том случае, когда каждый элемент первой последова­тельности содержится во второй последовательности. set_intersection – создаёт отсортированное пересечение множеств, то есть множество, содержащее только те элементы, которые одновременно входят и в первое, и во второе множество. set_difference – создание отсортированной последовательности элементов, входящих только в первую из двух последовательностей.

Слайд 19





Алгоритмы работы с ассоциативными контейнерами
    set_union – создает отсортированное объединение множеств, то есть мно­жество, содержащее элементы первого и второго множества без повторяющихся элементов.
    Методы
    begin() – указывает на первый элемент,
    end() – указывает на последний элемент,
    insert() – для вставки элементов,
    erase() – для удаления элементов,
    size() – возвращает число элементов,
    empty() – возвращает true, если контейнер пуст и др.
Описание слайда:
Алгоритмы работы с ассоциативными контейнерами set_union – создает отсортированное объединение множеств, то есть мно­жество, содержащее элементы первого и второго множества без повторяющихся элементов. Методы begin() – указывает на первый элемент, end() – указывает на последний элемент, insert() – для вставки элементов, erase() – для удаления элементов, size() – возвращает число элементов, empty() – возвращает true, если контейнер пуст и др.

Слайд 20


Ассоциативные контейнеры. (Лекция 5), слайд №20
Описание слайда:

Слайд 21


Ассоциативные контейнеры. (Лекция 5), слайд №21
Описание слайда:

Слайд 22





Программа «Формирование частотного словаря»
   Программа формирует частотный  словарь появления отдельных слов в некотором   тексте. Исходный текст читается из файла prose.txt, результат – частотный словарь – 
записывается в файл freq_map.txt.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <map> 	
#include <set> 	
#include <string>   …
int freq_map() 
{char punct[6] = {'.', ',', '?', '!', ':', ';'};
set <char> punctuation(punct, punct + 6);
ifstream in("prose.txt");
if (!in)  { cerr << "File not found\n"; exit(1);}
Описание слайда:
Программа «Формирование частотного словаря» Программа формирует частотный словарь появления отдельных слов в некотором тексте. Исходный текст читается из файла prose.txt, результат – частотный словарь – записывается в файл freq_map.txt. #include <iostream> #include <fstream> #include <iomanip> #include <map> #include <set> #include <string> … int freq_map() {char punct[6] = {'.', ',', '?', '!', ':', ';'}; set <char> punctuation(punct, punct + 6); ifstream in("prose.txt"); if (!in) { cerr << "File not found\n"; exit(1);}

Слайд 23


Ассоциативные контейнеры. (Лекция 5), слайд №23
Описание слайда:

Слайд 24





Результат
   Файл prose.txt:
«Рассмотрим, как работает эта программа. Программа подсчитывает сколько раз встречается каждое слово. Эта важная программа для изучения повторяемости различных слов.
Хорошая программа! Хорошая погода!»
Описание слайда:
Результат Файл prose.txt: «Рассмотрим, как работает эта программа. Программа подсчитывает сколько раз встречается каждое слово. Эта важная программа для изучения повторяемости различных слов. Хорошая программа! Хорошая погода!»

Слайд 25





Битовые множества (bitset)
     Битовое множество – это шаблон для представления и обработки длинной последовательности битов. bitset – битовый массив, для которого определены операции произвольного доступа, изменения отдельных битов и всего массива.  Биты нумеруются с 0. 
     Шаблон битового множества определён в заголовочном файле <bitset>. 
     Примеры создания битовых множеств:
bitset <100> b1;                                // сто нулей
bitset <16> b2 (0xf0f);                      // 0000111100001111
bitset <16> b3 (“0000111100001111”); 
bitset <5> b4 (“00110011”, 3);          //10011
bitset <3> b5 (“00110101”, 1, 3);      //011
Первый параметр – строка из “0” и “1”. Второй параметр – позиция начала, третий – количество символов.
Описание слайда:
Битовые множества (bitset) Битовое множество – это шаблон для представления и обработки длинной последовательности битов. bitset – битовый массив, для которого определены операции произвольного доступа, изменения отдельных битов и всего массива. Биты нумеруются с 0. Шаблон битового множества определён в заголовочном файле <bitset>. Примеры создания битовых множеств: bitset <100> b1; // сто нулей bitset <16> b2 (0xf0f); // 0000111100001111 bitset <16> b3 (“0000111100001111”); bitset <5> b4 (“00110011”, 3); //10011 bitset <3> b5 (“00110101”, 1, 3); //011 Первый параметр – строка из “0” и “1”. Второй параметр – позиция начала, третий – количество символов.

Слайд 26


Ассоциативные контейнеры. (Лекция 5), слайд №26
Описание слайда:

Слайд 27





Сортированные и хешированные ассоциативные контейнеры
   К сортированным ассоциативным контейнерам относятся: set, multiset, map, multimap.
   К хешированным: hash_set, hash_multiset, hash_map, hash_multimap.
   Сортированные контейнеры соблюдают отношение порядка (ordering relation) для своих ключей. Сортированные контейнеры гарантируют логарифмическую эффективность большинства своих операций. 
     Это гораздо более сильная гарантия, чем та, которую предоставляют хешированные ассоциативные контейнеры. Последние гарантируют постоянную эффективность только в среднем, а в худшем случае – линейную.
Описание слайда:
Сортированные и хешированные ассоциативные контейнеры К сортированным ассоциативным контейнерам относятся: set, multiset, map, multimap. К хешированным: hash_set, hash_multiset, hash_map, hash_multimap. Сортированные контейнеры соблюдают отношение порядка (ordering relation) для своих ключей. Сортированные контейнеры гарантируют логарифмическую эффективность большинства своих операций. Это гораздо более сильная гарантия, чем та, которую предоставляют хешированные ассоциативные контейнеры. Последние гарантируют постоянную эффективность только в среднем, а в худшем случае – линейную.

Слайд 28





Хешированные ассоциативные контейнеры
   Хешированные ассоциативные контейнеры основаны на той или иной реализации хэш-таблиц. 
   Элементы в таком контейнере не упорядочены, хотя их можно добывать последовательно. Если вы вставите или удалите элемент, то последовательность оставшихся элементов может измениться. 
   Преимуществом хешированных ассоциативных контейнеров является то, что в среднем они значительно быстрее сортированных ассоциативных контейнеров.
Описание слайда:
Хешированные ассоциативные контейнеры Хешированные ассоциативные контейнеры основаны на той или иной реализации хэш-таблиц. Элементы в таком контейнере не упорядочены, хотя их можно добывать последовательно. Если вы вставите или удалите элемент, то последовательность оставшихся элементов может измениться. Преимуществом хешированных ассоциативных контейнеров является то, что в среднем они значительно быстрее сортированных ассоциативных контейнеров.

Слайд 29





Хешированные ассоциативные контейнеры
    Удачно подобранная функция хеширования позволяет выполнять вставки, удаления и поиск за постоянное, не зависящее от n, время. Кроме того, она обеспечивает равномерное распределение хешированных значений и минимизирует количество коллизий.
Описание слайда:
Хешированные ассоциативные контейнеры Удачно подобранная функция хеширования позволяет выполнять вставки, удаления и поиск за постоянное, не зависящее от n, время. Кроме того, она обеспечивает равномерное распределение хешированных значений и минимизирует количество коллизий.

Слайд 30


Ассоциативные контейнеры. (Лекция 5), слайд №30
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию