Step 1 (S-38597)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/13029/step/1

Step 1 (S-38597) 1.png

[00:00 - 00:18] привет сегодня мы изучаем множество но что такое математическая структура которая позволяет хранить себя уникальный элемент обычно их изображают в виде пересекающая кружочков давайте сделаем множеством на c + +


Step 1 (S-38597) 2.png

[00:18 - 00:33] глюк сет сет английский множество ключевых библиотеку для работы с ними теперь создаем конкретно множество set in какой то название также так вектора мы пишем сначала названия


Step 1 (S-38597) 3.png

[00:33 - 00:51] типа данных но что потом с чего она будет состоять из целых чисел и название сразу посмотрим на примере довольно сложно задач пусть нас есть n запросов каждый из которых бывают 1 из 3 типов 1 это добавить элемент множества 2 проверить


Step 1 (S-38597) 4.png

[00:51 - 01:08] если такой элемент может или нет и 3 удалить элементы с множеством сначала читаем число н сколько нас будет запросу но потом будем работать каждый из них 1


Step 1 (S-38597) 5.png

Step 1 (S-38597) 6.png

[01:08 - 01:24] нам понадобится 2 переменных тип запроса 1 2 или 3 и число с которым от запрос выполняется считываемых и проверяем


[01:24 - 01:39] если t 1 астрал пишу комментарий что мы не запутались это добавить элемент добавление делать очень просто пишем имя нашего множество


[01:39 - 01:55] точка имя concert добавить что добавить числа икс иначе если тип 2 это проверка как проверить есть ли множество элемент


Step 1 (S-38597) 7.png

[01:55 - 02:13] так же как и в строках там есть метод find если строке он возвращал позицию начиная с которой начинается подстрока или - 1 если там от не нашлось то множество все немножко по другому если элемент не нашелся множестве


Step 1 (S-38597) 8.png

[02:13 - 02:28] tulip нас вернется указатель на and на конец то есть вот такая конструкция если икс равно s and означает что элемент не нашелся


[02:28 - 02:47] напечатай что его там нет иначе элемент нашелся чего мы сообщаем и наконец последний случай


[02:47 - 03:02] когда тип равен 3 на можно не писать это удалить элемент из множества удаление элемента делать тоже довольно просто метод airways удалить стереть


[03:02 - 03:20] все вроде бы все должно работать пусть нас есть спец вопросы сначала положим но что единичку проверим она там есть есть может там есть двойка не доводите нет теперь удалить


Step 1 (S-38597) 9.png

[03:20 - 03:37] и проверь есть ли она там нету все работа с отдельными элементами мы научились теперь научимся выводить все элементы которого содержится множество да то есть 2 способа ну вот мы немножко упростим оставим только


Step 1 (S-38597) 10.png

Step 1 (S-38597) 11.png

[03:37 - 03:53] добавление элементов то есть теперь у нас никаких типов нету а только число с читом которой нужно добавить


Step 1 (S-38597) 12.png

[03:53 - 04:10] все элементы множества можно с помощью нашего любимого автора то есть можно написать такую конструкцию аппарата но двоеточие и наша множество у нас будут перебираться все элементы так что он просто их печатаем


Step 1 (S-38597) 13.png

[04:10 - 04:26] их разделяет пробел пусть нас есть 5 элементов но они как то там расположен отлично напечатал нам всем содержимым множество причем возрастающем порядке это связано с тем что внутри может


Step 1 (S-38597) 14.png

Step 1 (S-38597) 15.png

[04:26 - 04:43] представляет сложную структуру данных котором 20 красно черное дерево пока не будем вникать в ее внутреннем настрое с тобой пользоваться есть еще 1 способ вывести все или даже не все элементы множества сейчас а потому как отделаться опять же ты делал с помощью форума


Step 1 (S-38597) 16.png

[04:43 - 05:00] но теперь у нас now будет не очередной элемент а указать на очередной элемент 1 делом мы пишем с чем ночная 1 сначала множество это самый маленький элемент идем до тех пор пока наш указатель не стал равен


[05:00 - 05:14] и на каждом шаге можем делать + + увеличение на единичку но в нашем случае это переход к следующему элементу множества поскольку нам показывает на элемент множества


[05:14 - 05:29] они содержат значения нам нужна сказал что он опираться звездочка которая превращает показатель его содержимое то есть в то что содержится по этому адресу проверим что ничего не сломалось


[05:29 - 05:46] да все по прежнему работ смотрите раз оно будет элемент по возрастанию то значит штук можно использовать для сортировки элемент то что мы писали на 1 из предыдущих занятий там много строк


Step 1 (S-38597) 17.png

Step 1 (S-38597) 18.png

[05:46 - 06:05] и работу вообще говоря медленно проверь а правда лето пока похоже а теперь похоже почему это связано с самой логикой множество множество хранятся уникальные элементы если мы туда 2 раза пытаемся добавить единичку там по прежнему остается 1 единичка


Step 1 (S-38597) 19.png

[06:05 - 06:22] вот как если бы собирать коллекцию я снова вы нашли что то что у вас уже есть полушарии коллекций ценность не добавляет может обменять на что то но заставить множество сортировать по настоящему можно для этого есть структура который называется мультисплит


Step 1 (S-38597) 20.png

[06:22 - 06:37] мультисайт позволяет хранить себе одинаково элементы проверим что то так да мультисайт действительно хранит одинаковой элемент


Step 1 (S-38597) 21.png

[06:37 - 06:56] с помощью обычного сайта можно решить еще 1 прикольную задачку которая собственно следует из определения множества это посчитать количество различных элементов я уже точно просто вернем как было и будем выводить количество элементов во то можно было бы сделать например прибавлять щечку единицу каждый раз вместо вывода


Step 1 (S-38597) 22.png

Step 1 (S-38597) 23.png

[06:56 - 07:12] но есть более простой способ потому что у нас то есть метод size который собсно говорит сколько в нем элементов пусть мы вводим 5 каких то чисел некоторые из них


Step 1 (S-38597) 24.png

Step 1 (S-38597) 25.png

[07:12 - 07:26] повторяются получил нас 3 различных элемента все просто и понятно что закажу еще 1 штуку который умеет делать множество как я говорил там внутри красно черное дерево оно позволяет переходить к следующему по величине элемент


Step 1 (S-38597) 26.png

[07:26 - 07:43] а с помощью это можно сделать вообще очень классные вещи например посчитать сколько раз у нас встречает какое число умножь то как мы это будем делать ну считывании остается тоже и допустим мы хотим посчитать сколько раз у нас встретилась единица


[07:43 - 08:00] сделать перемену которая будет хранить количество вхождений единиц а потом создаем показатель который будет показывать не на begin


Step 1 (S-38597) 27.png

[08:00 - 08:17] она штукатурщица лор lore bound возвращает указатель на 1 элемент больше либо равный диаметру нашем случае речь


[08:17 - 08:35] и тима до тех пор пока наш указатель не станет равен автор bound bound это 1 строго большее число указать на 1 строго больше числа на каждом шаге будем переходить к следующему


[08:35 - 08:50] величием счетчик на единицу и после цикла выводим его попробуем так нашем сайте


Step 1 (S-38597) 28.png

[08:50 - 09:09] 3 и действительного правильно посчитал все + + есть еще 1 структура похожа на множество котором взять словарь словарем она называется потому что ставит в соответствие ключу значение ну например в словаре иностранных слов миром слов на русском и есть 1 или несколько переводов на другой язык


[09:09 - 09:24] чтобы сделать словарь можно подключить библиотеку мап назвать он тоже как карта например нас будет ставить соответствует числу строку


Step 1 (S-38597) 29.png

[09:24 - 09:40] пусть нам звонит кто то определяется в номер а мы хотим вывести на экран что этот человек как у нас записано добавлять элемент в мап очень просто мы


Step 1 (S-38597) 30.png

[09:40 - 09:55] пишем имя нашего папу и в квадратных скобочках ключ по которому мы хотим добавить например если нам звонят по номеру 112 то мы запишем что это соус да брат она будет звонить по этому номеру но мало ли что


Step 1 (S-38597) 31.png

[09:55 - 10:14] когда мы хотим проверить есть ли такой ключ то делаем это точно также как в сайте если именно find ключ я равно концу


[10:14 - 10:32] мы видим здесь нашлось он проверил действительно нашлось да нашлось если мы хотим обратиться к элементу


Step 1 (S-38597) 32.png

[10:32 - 10:47] делаем это так же как например в векторе только в квадратных скобочках пишем ключ который нам нужен он может быть не только число может быть строкой мы предварительно должен быть как то сон посмотрим как пройтись по всем элементам словаря


[10:47 - 11:04] это почти так же как но чтоб мы немножко отличаться добавим интересно что нибудь еще пример номер скоро помощь понадобится и пройдемся но сделать это можно также 2 способами


Step 1 (S-38597) 33.png

[11:04 - 11:23] вопрос более чем отличие если множество у нас просто поочередно подставляют элементы здесь будут подставляться пары состоящие из ключа и значение во 1 мы не забудем подключить библиотеку


Step 1 (S-38597) 34.png

[11:23 - 11:39] для работы со строками и попробуем научиться выводить пар что это довольно просто пишем имя нашей пары точка и у меня есть 2 поле first и second


[11:39 - 11:55] никаких скобочка здесь писать не нужно просто пишем точка или нам точка будем вводить перевод строки чтобы у нас


[11:55 - 12:14] все было красиво вот мы увидели странную проблему это очень классно ошибку вас такая тушь может возникнуть я вместо равно написал равно равно программа работает но


Step 1 (S-38597) 35.png

Step 1 (S-38597) 36.png

[12:14 - 12:30] делать абсолютно не то чего мы хотим исправим посмотрим да теперь все хорошо как видите ключи упорядочены по возрастанию потому что суть там такая же как и множество только каждому ключу еще дополнительно с поставлен значение


Step 1 (S-38597) 37.png

Step 1 (S-38597) 38.png

[12:30 - 12:48] с помощью словаря можно хранить не только пару ключ значение но и 1 ключу составляет несколько значений например в словаре иностранных слов для русского слова может быть несколько вариантов перевода или в телефонной книжке для 1 человека может быть записано несколько номеров


[12:48 - 13:04] чтобы сделать это нам понадобится вектор значение подключен я к вам создадим маф например для телефонной книжке где у нас есть имя и вектор


Step 1 (S-38597) 39.png

[13:04 - 13:20] из телефонных номеров но пусть они тоже дают строкой давайте положим туда что нибудь значение вектора можно записывать в скобочках если мы его инициализировать


[13:20 - 13:38] вася нашего есть какие то планы пробежаться по всем элементам 0 легко мы перебираем все элементы вектора


[13:38 - 13:54] где хранятся телефонные номера конкретном вась щас now будет поочередно принимать значение телефонных номеров ну дома печатать ну че нибудь разделять


[13:54 - 14:13] да вот они напечатать таким образом если вам нужно будет какой нибудь задач сохранить для включая несколько значений то вы делаете вектор и все их добавлять обычным способом поэтому или делайте сразу вектора определенного размера все тоже самое обращаться к нему нужно будет


Step 1 (S-38597) 40.png

[14:13 - 14:30] по ключу опять похожа на ветер мы пишем ткнуть в квадратных скобках но причем может выступать уже не только число а например строка как это сделано у нас на этом на сегодня все в отличном за этим посмотрим еще всякие прикольные штучки которые облегчают нашу жизнь пока


Step 1 (S-38597) 41.png