Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KPIYaP_OTVET_3.rtf
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
540.37 Кб
Скачать

Int main(){

map < char, int > m;

// Вставка с помощью конструктора pair

for (int i = 0; i < 5; ++i )

m.insert( pair<char, int>( 'A' + i, 65 + i);

// Вставка с помощью ффункции make_pair

for (int i = 5 ; i < 10; ++i)

m.insert(make_pair((char)('A'+i), 65 + i);

map<char, int>::iterator mi;

for (mi = m.begin(); mi != m.end(); ++mi)

cout << (*mi).first << ':' << (*mi).second << ' ';

return 0;

}

Класс set.

set - это ассоциативный контейнер, который поддерживает уникальные ключи (не содержит ключи с одинаковыми значениями) и обеспечивает быстрый поиск ключей.

Associative containers are containers especially designed to be efficient accessing its elements by their key (unlike sequence containers, which are more efficient accessing elements by their relative or absolute position).

Internally, the elements in a set are always sorted from lower to higher following a specific strict weak ordering criterion set on container construction.

Sets are typically implemented as binary search trees.

Therefore, the main characteristics of set as an associative container are:

  • Unique element values: no two elements in the set can compare equal to each other. For a similar associative container allowing for multiple equivalent elements, see multiset.

  • The element value is the key itself. For a similar associative container where elements are accessed using a key, but map to a value different than this key, see map.

  • Elements follow a strict weak ordering at all times.

This container class supports bidirectional iterators.

//

#include <iostream>

#include <set>

using namespace std;

int main ()

{

set<int> myset;

set<int>::iterator it;

pair<set<int>::iterator,bool> ret;

// set some initial values:

for (int i=1; i<=5; i++) myset.insert(i*10); // set: 10 20 30 40 50

ret = myset.insert(20); // no new element inserted

if (ret.second==false) it=ret.first; // "it" now points to element 20

myset.insert (it,25); // max efficiency inserting

myset.insert (it,24); // max efficiency inserting

myset.insert (it,26); // no max efficiency inserting

int myints[]= {5,10,15}; // 10 already in set, not inserted

myset.insert (myints,myints+3);

cout << "myset contains:";

for (it=myset.begin(); it!=myset.end(); it++)

cout << " " << *it;

cout << endl;

return 0;

}

// =============

myset contains: 5 10 15 20 24 25 26 30 40 50

// =============

/* multiset и multimap - то же самое, только с повторяющимися ключами */

3.29

Алгоритмы STL

Алгоритмы

  • Алгоритм-функция-манипулятор (инициализация, сортировки, поиска и т.п.), которая работает с элементами некоторого контейнера.

  • Некоторые алгоритмы можно применять к диапазону элементов, находящихся в контейнере.

  • Диапазон-последовательность целочисленных индексов элементов, допускающих произвольный доступ.

Алгоритмы инициализации

  • Fill,fill_n-заполнение диапазона заданным значением

  • Generate, generate_n-заполнение диапазона фунцией-генератора

  • Copy-копирование элементов диапазона

  • Copy_backward-копирование элементов диапазона в обратном порядке

  • Merge, inplace_merge-объединение двух упорядоченных последовательностей элементов в одну

  • Replace,replace_copy,replace_if,replace_copy_if-замена элементов диапазона.

  • Reverse, reverse_copy-реверсирование диапазона элементов

  • Swap,swap_ranges,iter_swap-обмен местами элементов

  • Rotate,rotate_copy-циклическая перестановка элементов

  • Next_permutation,prev_permutaton-формирование перестановок элементов последовательности

  • Random,shuffle-перетасовка

  • Remove,remove_if,remove_copy,remove_copy_if-удаление элементов диапазона

  • Unique,unique_copy-удаление дубликатов из заданного диапазона

Алгоритмы сортировки

  • Sort,partial_sort,partial_sort_copy,stable_sort-упорядочивание диапазона

  • Partition,stable_partition-упорядочивание диапазона элементов так, чтобы все элементы удовлетворяющие заданному условию, предшествовали всем остальным элементам.

  • Make_heap,pop_heap,push_heap,sort_heap-рабоота с «кучей»(предоставление для priority_queue)

Алгоритмы поиска

  • Adjacent_find-поиск пары совпадающих элементов

  • Find,find_end,find_first_of, find_if-поиск вхождения элементов

  • Binary_search-бинарный поиск в упорядоченной последовательности

  • Includes-проверка вхождения одной последовательности в другую

  • Search,search_n-поиск подпоследовательности

  • Lower_bound,upper_bound-определенгие элемента границы по заданному значению

  • Mismatch-поиск первого несовпадения двух последовательностей

  • Max_element, min_element-поиск элемента последовательности

  • Equalсравнение последовательностей

  • Equal_range-определение диапазона для вставки элементов без нарушения порядка последовательности

  • Lexicographical_compare-лексикографическое сравнение двух последовательностей

  • Min,max-сравнение двух элементов

Математически алгоритмы

  • Count-число элементов последовательности

  • Count_if-число элементов по заданному условию

  • Trancsorm-преобразование элементов диапазона

  • For_each-применение функции к диапазону элементов

Операции над множествами

  • Set_difference-выделение несовпадающих элементов двух последовательностей

  • Set_intersection-выделение совпадающих элементов двух последовательностей

  • Set_symmetric_difference-выделение симметричной разности двух последовательностей

  • set_union-объединение двух последовательностей

#include <iostream>

#include <conio.h>

#include <algorithm>

#include <vector>

using namespace std;

template<class T>

void show(vector<T> &v)

{

vector<T>::iterator vi;

for(vi=v.begin(); vi!=v.end(); vi++)

cout<<*vi<<" ";

cout<<endl;

}

char coder (char c)

{

return (c+1);

}

bool sort_predicate(char c1,char c2)

{

return (c1>c2);

}

int main()

{

vector<char> v;

vector<char>::iterator vi;

for(int i=1;i<10;i++)

v.push_back((char)(60+rand()%30));

show(v);

cout<<"count of 'N'"<<count(v.begin(),v.end(),'N')<<endl;

replace_copy(v.begin(),v.end(),v.begin(),'0',':');

show(v);

vi=remove_copy(v.begin(),v.end(),v.begin(),':');

v.erase(vi,v.end());

show(v);

reverse(v.begin(),v.end());

show(v);

vi=unique(v.begin(),v.end());

v.erase(vi,v.end());

show(v);

transform(v.begin(),v.end(),v.begin(),coder);

show(v);

sort(v.begin(),v.end(),sort_predicate);

show(v);

vi=find(v.begin(),v.end(),'Z');

if(vi!=v.end())cout<<"find"<<*vi<<endl;

fflush(stdin);

getch();

return 0;

}

3.30

Итераторы

Итератор-объект, похожий на указатель и предназначенный для перемещения по содержимому контейнера (аналогично перемещению указателя по элементам массива).

Особенности:

  • Итераторы объявляются в различных контейнерах

  • Итераторы можно увеличивать, уменьшать, разыменовывать.

Основные виды итераторов

  • Итератор произвольного доступа - чтение и запись элементов путём произвольного доступа

  • Двунаправленный итератор - чтение и запись элементов путём перемещения вперёд или назад

  • Прямой итератор - чтение и запись элементов путём перемещения только вперёд.

  • Итератор ввода - только чтение элементов путём перемещения только вперёд

  • Итератор вывода - только запись элементов путём перемещения только вперёд

Итераторы, обладающие более широкими возможностями, можно использовать вместо более слабых итераторов.

void print (const vector<const char*>& v_) {

vector<const char*>::const_iterator i;

for (i = v_.begin (); i != v_.end (); i++)

cout << *i << endl;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]