Главная » Просмотр файлов » Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)

Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 120

Файл №1004033 Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)) 120 страницаБьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033) страница 1202018-10-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 120)

Основную работу можно выполнить в процессе считывания пар (имя предмета, значение) в контейнер и типа иар: гоЫ геайгетз (тор<в!к!па, иг> а и ) ( ззг!пя июгй) 580 Глава 17. Стандартные контейнеры !пс га! = Ог нЫ1е (с!п » погг! » га!) т (вогг!) е= га1; Операция индексирования т(ггогг!) определяет соответствующую пару (з(Г!лд, гл1) и возвращает ссылку на ее целочисленную часть.

Этот код пользуется тем фактом, что в новом элементе целая часть по умолчанию устанавливается равной нулю. Созданный функцией геаг1!тете () можно легко распечатать при помощи традиционного цикла: !гп гиа!и ( ) ( тар<тг!пд, !пг> ГЫ; геаЖгетз (1Ы); !пг го1а! = д( (урезе! тар<етг!пд, т(>:: соле! !(егагог С1; аког(С1р = (Ы.Ьед1п (); р ! = 1Ы.епй(); еер) ( тога1 е= р->зесоп6! сои!« р->7)гзг « ' У' « р->еесоий « ' ~п '; ) сои!« "----------------)итога! ')1" «гота!« ' )и' ге!игл ! сй; ) что даст следующий результат: лат тес 9 па(! 1350 зап 7 Тога! 1366 Обратите внимание на то, что предметы распечатаны в лексикографическом порядке (517.4.1, З!7.4.1.5). Операция индексирования должна найти ключ в ассоциативном массиве типа шар.

Это, конечно, не так дешево, как индексация массива целым числом. Цена равна О (!оя(з!ге о!' тар) ), что приемлемо для многих приложений. А для тех из них, где это неприемлемо, выходом может оказаться хэшированный контейнер (в17.6). Когда ключ не находится, операция индексации добавляет элемент с умолчательным значением. Поэтому для константных ассоциативных массивов не существует соответствующей версии операции индексации.

И, вообгце, операция индексации выполнима только если торрес( 1уре имеет значение по умолчанию. Если программист хочет просто посмотреть, имеется ли уже данный ключ в контейнере, он может применить операцию37пЫ() (З(7.4.1.6), которая не изменяет ассоциативный массив тар. ) 7.4. Ассоциативные контейнеры 581 17.4.1.4. Конструкторы Контейнер тар предоставляет обычный набор конструкторов и прочих операций (э!б.3.4): !етрьие<с(аяяКеу, с(аяя Т, с(аяя Стр=1еяя<Кеу>, сьгт А=айостог<ра1г<солм Кеу, Т>» с1аяя тар ( риЫ!с: // ...

У конструирование/копирование/уничтожение: ехрдсй тар (солт Стря с=Стр (), сопя! Ая = А () ); гетр!аге<с!от 1п> тор(1п7)гяг, 7л 1ат, соля! Стра с=Стр(), сопя! Ая = А () ); тар (сопя! тара ); -тар () тара орега(ог= (соля! тара) //... )' Копирование контейнера предполагает выделение памяти под элементы и копирование каждого из них (Э16.3.4). Все это весьма дорого, так что пользоваться этим нужно лишь при необходимости. Как следствие, контейнеры типа тар передают, чаще всего, по ссылке. Шаблонный конструктор принимает диапазон пар рагс<соля! Кеу, Т>, задаваемый входными итераторами. При помощи функции 1ляегг() 617.4.1.7) он вставляет элементы этого диапазона в контейнер тар.

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

По умолчанию, для сравнения ключей используется операция <, но можно предоставить и альтернативу в виде параметра шаблона или аргумента конструктора (э17.3.3). Это именно сравнение ключей, в то время как иа!ие гуре для тар есть пара (ключ, значение). Поэтому функция га1ие сотр () определяется таким образом, чтобы сравнивать пары, используя функцию сравнения ключей: гетр!а!е<с1аяя Кеу, сгат Т, ваяя Стр = 1еяя<Кеу>, с1аяя А = а!1осагог<раи <солт Кеу, Т» > с!ат тар ( риЫ(с: /у ...

(урейе~Стр Ьеу сотраге; с(ат га(ие сотраге: риЫ(с Ь(лагу /илсг!ол<иг(ие гуре,иа!ие гуре, Ьоо1> ( 7г(ел4 с!ат тар; 582 Глава 17. Стандартные контейнеры рго(ес<еИ: Стр стр< ча!ие сотраге(Стр с): стр(с) () риЫ<с: (<оо! орега(ог() (солт яа<ие <урез х, сопя< яа1ие (урез у) сопи ( гетгп стр (х.!)гя<,у./)гя<); ) )1 (<еу (отроге (<еу совр() сопз1; ча!ие сотраге яа!ие сотр () сопя(; //... )1 Например: тор<зашя, !п<> т1; тор<я<с<ил, !и<, )ч(овале> т21 //задаем тип сравненин (З17.!.4.!) тор<я<я(пК, т<,К<с<ил стр> тЗ; //задаем тип сравнения (З!7!.4.1) тор<я<с!пл, !п<, Б(г!пл стр> т4 (5(г!ал стр (!!<его(у) ) < /У передаем объект сравнения Функции-члены !(еу сотр() и яа!ие сотр() позволяют запрашивать ассоциативные массивы о способах, которыми они сравнивают ключи и значения.

Обычно это делается с целью обеспечить тот же самый критерий сравнения лля других контейнеров и алгоритмов. Например: яо(<<1 (тор<я(г(пл, ш(>й т) ( тор<топя, !и<> т21 // сравнение с помощью < (умолчательный вариант) тор<я(г!пл, и«> тЗ (т. 1<еу сотр () ) 1 У с равнение с полющью т У.. ) О том, как определить специфическое сравнение, рассказано в 817.1.4.1; общее описание классов функциональных объектов дано в 818.4.

17.4.1.6. Специфические дпя контейнера (пар операции Главная идея ассоциативных массивов (и вообще всех ассоциативных контейнеров) состоит в получении информации по ключу. Для этого в контейнер тар введено несколько специфических операций: (етр1а<е<с!ат Кеу, с!аяз Т, с!ат Стр = !ет<Кеу>, с<от А = «Носа(ог<ра(г<сопя( Кеу, Т» > с!ат тар риЫ<с: // ... У операции ассоциат ивных массивов: !<ега<огЯп«(сопя( Иеу 1урей (<) 1 //находит элемент с ключом « сопя< !<его<ос)!п«(сопя< )<еу 1урей 1() сопя(1 зйе <уре соил((сопя< кеу <урей (<) сопя<;,У находит число элементов с ключом 1< 17,4.

Ассоциативные контейнеры 583 1<его<ос <о<гег Ьоипй !сопл< Ьеу <уреа Ь! < УУ находит первый элемент с ключом Ь соил< йега<ог <о<оег Ьоипй(сопи< Ьеу <урез Ь) сопл« йепиог иррег Ьоии«(сопз< Ьеу <урез Ь) < УУ находит первый эл-т с ключом, болыаим 1< сопл< йега<ог иррег Ьоипй(сопл< Ьеу <урез Ь) сопл« ра<г<1<ега<ог, йега<ог> еаиа< гинее (сопз< Ьеу <урез Ь) < ра<г<сопз< йега<ог,сопл«<его<ос> едиа< галие(сопл< йеу <урез Ь) соил« уу ...

Выражение т .7<и<! ( й) просто выдает итератор, соответствующий элементу с ключом й. Если такого элемента не существует, возвращается итератор т. еи<!О . Для контейнеров с уникальными ключами, таких как тар или зе<, результирующий итератор будет указывать на уникальный элемент с заданным ключом й. Для контейнеров, не имеющих уникальных ключей, таких как тиЫтар или тиЫзе<, результирующий итератор будет указывать на первый элемент с таким ключом. Например: зоЫу'(и<ар<в<пир, <т>а т) ( тор<в<пни, Ы<>: «<ега<ог р = т.у<п«("Со<<<" ) < (7(р! =т.еп«() ) УУ если найден "СоЫ" ( уу... ) е<зе (! (т.3)п«( "Я11гег" ) ! =т. епй () ) У ищем "Б!(зег" ( У...

УУ ... ) Для контейнера зли!итар (в)7.4.2) нахождение первого вхождения редко когда полезно; выражения т. 1оиег Ьоии<3(п) и т. иррег Ьоип<!(Ь) дают начало и конец подпоследовательности элементов контейнера т с заданным ключом 1<. Как обычно, конец подпоследовательности фиксируется итератором, указывающим на элемент, расположенный за последним элементом подпоследовательности. Например: гоЫЯти<<<тар<з<г<ил, !п<>з т) ( т нттар <тгшя, <п<>:: вега <ог <Ь = т . <о пег Ьон ай ( " СоЫ" ) < та<<<тир<в<пни, 1п<>:: йега<ог иЬ = т. ирре< Ьоипй ( "СоЫ" ) < 1ог(та<<<тор<Яппи, <п<>: <йега<ог р = 1Ь< р! =иЬ< +~р) ( уу ...

) ) Нахождение верхней и нижней границ двумя раздельными операциями и не элегантно, и не эффективно. Операция е<уиа! галие() предоставляет обе границы. Например: Глава 17. Стандартные контейнеры гоЫ7'(ти(((тор<в(г!пя, !п(>ь т) ( (уре((еш ти((!тор<в(г!ид, (п(>:: дега(ог М1; рапы<М, М1> К = т.е((иа! гапке("бо((("); аког(М1 р = К.у)гз(( р! =К.зесопдт <-~р) ( У..

) ) Если 1озгег Ьоип(1(Ь) не находит ключа 1(, то она возвращает итератор, настроенный на первый элемент, имеющий ключ, больший Ь, или возвращает еп(1() в отсутствие такого элемента. Этот способ сигнализации о неудаче применяется также и в функциях иррег Ьоип(1 О и е(1иа1 гапде () . 17.4.1.7. Операции, характерные дпя списков Стандартным способом введения значения в ассоциативный массив является простое присваивание с применением индексации. Например: рлопе Ьоо((("Оп(ег ((враг(теп(") = 8226339( Это гарантирует, что "Отдел заказов" ("Ог()ег ()ерагйпеп(") будет внесен в рйопе Ьоой (телефонная книга) независимо от того, была ли об этом отделе внесена какая-либо запись ранее. Однако имеется и возможность непосредственно внедрять элементы традиционной для списков функцией Ьиег(( ) и удалять их функцией егаве(): (е(пр(а(е<с(авв Кеу, с(авв Т, с(авв Стр = 1евв<Кеу>, с1авв А = айоса(ог<ра)г<сопя Кеу, Т» > с(азв тар ( риЫ(с: /У ...

// списковые операции( рай<дега(ог, Ьоо(> (пзеп (сопл( го!ив (урез ка1) ( У вставить пару ()(еу,ка!ие! 1(ега(ог (пвег( (((ега(ог роз, сопя ва(ие (уреь ка() ( //роз - подсказка начала поиска (етр(а(е <с(азз 1п> юЫ(пзег((1пЯгв(, (п (аз() ( //вставить эл ы из поскедовот ти коЫ егаве ( 1(ега(ог роз) ( //удалить указуемый элемент з!(е (уре егазе (сопз( Ьеу (урев !() ) //удалить элемент с ключом (( (если он есть) гоЫ егазе(дега(огутв(, 1(ега(ог 1ая) ( //удалить диапозон го!И с(еаг() ( У.. )( //удалить все элементы Выражение т.1пзег((га1) пытается добавить в т пару га1 типа (Кеу, 7). Поскольку ассоциативные массивы (пар — это контейнеры с уникальными ключами, такая вставка проходит лишь в случае, когда в т нет элемента с указанным ключом. Возвращаемое при этом значение — это пара ров<1(ега(ог,Ьоо1>.

Логический элемент пары в случае успеха операции равен (гае, а итератор указывает на элемент контейнера т, ключ которого равен га!.11гз(. Например: 585 ) 7.4. Ассоциативные контейнеры вой(~(тор<в(г(пя, (п(>в т) ( ра(г<в(г(ле, и(> р99 (" РаиГ', 99); ра(с<тор<в(г(ле, (п(>:: пега(ог, Ьоо(> р = т. твег( (р99) ( (Р(р. весопЮ ( л' "Раи!" - вставлен ) е(ве ( // "Рои!" уже присутствует ) тор<во(пд,т(>: (пега(ог ! = р.)(гв(( дуказывает на т! "Рои!"] !7... Обычно, нас при этом не очень заботит, был ли ключ вставлен впервые или уже присугствоввл в контейнере типа тар до выполнения операции и(вег(() . Это может быть интересно лишь в связи с необходимостью зафиксировать факт неожиданного его там появления (по внешним для нас причинам).

Характеристики

Тип файла
DJVU-файл
Размер
8,84 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее