C++ за 21 день седьмое издание



Download 1,38 Mb.
bet337/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   333   334   335   336   337   338   339   340   ...   437
Bog'liq
word1

8:

cout

«

"Number of pairs,

size():

" « Input.size() « endl;

9:

cout

«

"Max bucket count

= " «

Input.max_bucket_count()

  1. endl;




  1. cout « "Load factor: " « Input.load_factor() « endl;




  1. cout « "Max load factor = " « Input.max_load_factor() « endl;




  1. cout « "Unordered Map contains: " « endl;



13:



  1. for(auto iElement = Input.cbegin() // auto, cbegin: C++11



15: ; iElement != Input.cend() // cend(): C++11



  1. ; ++ iElement )




  1. cout« iElement->first« " -> " « iElement->second« endl;




  1. }



19:



  1. int main()

21: {



  1. unordered_map umapIntToString;




  1. umapIntToString.insert(make_pair(1, "One"));




  1. umapIntToString.insert(make_pair(45, "Forty Five"));




  1. umapIntToString.insert(make_pair(1001, "Thousand One"));




  1. umapIntToString.insert(make_pair(-2, "Minus Two"));




  1. umapIntToString.insert(make_pair(-1000, "Minus One Thousand"));




  1. umapIntToString.insert(make_pair(100, "OneHundred"));




  1. umapIntToString.insert(make_pair(12, "Twelve"));




  1. umapIntToString.insert(make_pair(-100, "Minus One Hundred"));








  1. DisplayUnorderedMapcint, string>(umapIntToString);



33:



  1. cout « "Inserting one more element" « endl;




  1. umapIntToString.insert(make_pair(300, "Three Hundred"));




  1. DisplayUnorderedMap(umapIntToString);



37:



  1. cout « "Enter key to find for: ";




  1. int Key = 0;




  1. cin » Key;



41:



  1. auto iElementFound = umapIntToString.find(Key);




  1. if (iElementFound != umapIntToString.end())




  1. {



45: cout « "Found! Key " « iElementFound->first



    1. " points to value ";




  1. cout « iElementFound->second « endl;




  1. }

Предоставление специального предиката сортировки

479




  1. else




  1. cout « "Key has no corresponding value in unordered map!"




  1. endl;



50:



  1. return 0;




  1. }



Результат


Number of pairs, size(): 8


Max bucket count = 8


Load factor: 1


Max load factor = 1


Unordered Map contains:


-1000 -> Minus One Thousand


1001 -> Thousand One


1 -> One


-100 -> Minus One Hundred


45 -> Forty Five


-2 -> Minus Two


12 -> Twelve


100 -> One Hundred


Inserting one more element


Number of pairs, size(): 9


Max bucket count = 64


Load factor: 0.140625


Max load factor = 1


Unordered Map contains:


1 -> One


-1000 -> Minus One Thousand


1001 -> Thousand One


-100 -> Minus One Hundred


45 -> Forty Five


-2 -> Minus Two


300 -> Three Hundred


12 -> Twelve


100 -> One Hundred


100 -> One Hundred


Enter key to find for: 300


Found! Key 300 points to value Three Hundred


Анализ

Просмотрите вывод и обратите внимание на то, как контейнер u n o rd ered _ m a p , изна­ чально насчитывающий восемь ячеек и заполненный восьмью парами, изменяет свои раз­ меры при вставке девяти пар. Вот когда количество ячеек увеличивается до 64. Обратите внимание на применение методов m a x _ b u c k e t_ c o u n t (), lo a d _ f a c t o r () и m a x _ lo ad _ f a c t o r () в строках 9-11, а также на то, что остальная часть кода почти не отличается от такового по сравнению с контейнером s t d : :map. Это же относится и к применению метода f i n d () в строке 42, который возвращает итератор, как и у контейнера s t d : :map, его также следует сравнить с результатом метода e n d (), чтобы удостовериться в успехе операции.



  1. ЗАНЯТИЕ 20. Классы карт библиотеки STL




ВНИМАНИЕ!

Не следует полагаться на порядок элементов в контейнере unordered_map













независимо от ключа. Порядок элементов относительно других элементов в







карте зависит от многих факторов, включая их ключ, порядок вставки, количе­







ство ячеек и т.д.







Эти контейнеры оптимизированы для производительности поиска, поэтому не

;




стоит полагаться на порядок элементов при их переборе.

|

ПРИМЕЧАНИЕ

Продолжительность вставки и поиска в контейнере std: :unordered_map







практически постоянна (при отсутствии конфликтов) и не зависит от количе­







ства содержащихся в нем элементов. Но это не обязательно делает контейнер

|




std: :unordered_map предпочтительней контейнера std: :map, который

i




обеспечивает логарифмическую сложность во всех ситуациях. Постоянная про-

'




должительность может оказаться намного больше логарифмической, когда ко-

j




личество содержащихся элементов не слишком велико.




При выборе типа контейнера имеет смысл провести испытания, моделирующие их применение в реальном сценарии.





РЕКОМЕНДУЕТСЯ

Используйте карту, если необходимо хранить пары “ключ-значение" с уникальными ключами


Используйте мультикарту, если необходимо хранить пары “ключ-значение”, ключи кото­ рых могут повторяться (например, телефонный справочник)


Помните, что и карта, и мультикарта, как и дру­ гие контейнеры библиотеки STL, предоставляют метод size (), сообщающий количество храни­ мых пар


Используйте контейнеры unorderedjmap или unordeгed_mu 11imap, когда абсолютно необходима постоянная продолжительность вставки и поиска (обычно, когда количество элементов очень высоко)


Резюме
НЕ РЕКОМЕНДУЕТСЯ

Не забывайте, что метод multimap::count {Ключ) сообщает количество доступных в кон­ тейнере пар, индексированных при помощи ключа Ключ


Не забывайте проверять результат метода find (), сравнив его с результатом метода end ()



На сегодняшнем занятии рассматривались шаблоны классов тар и m ultim ap би­ блиотеки STL, их важнейшие функции-члены и характеристики. Вы также узнали, что





  1. этих контейнеров логарифмическая сложность и что библиотека STL предоставляет хеш-таблицы в форме контейнеров unordered_map и unordered_m ultim ap. Они демон­ стрируют высокую производительность операций вставки и поиска, которая не зависит от размера контейнера. Вы также узнали о важности возможности настройки критериев со­ ртировки с использованием предиката, как представлено в приложении из листинга 20.5.

Вопросы и ответы

48 1



Вопросы и ответы



  1. Как мне объявить контейнер тар для хранения целых чисел, отсортированных в порядке убывания?

Карту целых чисел определяет шаблон класса m ap< int> . Он имеет заданный по умол­ чанию предикат сортировки s t d : : le ss< T > , располагающий элементы в порядке воз­ растания. Его можно выразить как m a p < in t, l e s s < in t> > . Для сортировки в порядке убывания определите карту как m a p c in t, g r e a te r < in t> > .





  1. Что будет при вставке в карту для строк строки "Jack" дважды?

Карта не предназначена для хранения повторяющихся значений. Поэтому реализация класса s t d : :map не позволит вставить второе значение.



  1. Что нужно изменить в предыдущем примере, чтобы все-таки вставить две строки "Jack"?

Реализация класса т а р позволяет хранить только уникальные значения. Смените вы­ бранный контейнер на m u ltim ap .



  1. Какая функция-член класса multimap возвращает количество элементов с опреде­ ленным значением в контейнере?

Функция c o u n t (зн а ч е н и е) .





  1. Используя функцию fin d (), я нашел элемент в карте и имею теперь указываю­ щий на него итератор. Как мне использовать этот итератор для изменения значе­ ния, на которое он указывает?

Никак. Некоторые реализации библиотеки STL могли бы позволить пользователю из­ менить значение элемента карты при помощи итератора, возвращенного, например, функцией f i n d (). Но так поступать неправильно. Итератор на элемент карты должен использоваться как константный, даже когда реализация библиотеки STL не препят­ ствует этому.






  1. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   333   334   335   336   337   338   339   340   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish