Разбиране на Unordered_Map::Find()
Функцията unordered_map::find() е предназначена да намери елемент, който е свързан с определен ключ в рамките на „unordered_map“. Неговата декларация варира в зависимост от това дали обектът е квалифициран с константа или не, осигурявайки гъвкавост при използването му.
намиране на итератор ( конст ключ_тип и к ) ;Това се използва, когато „unordered_map“ не е квалифицирана константа. Този код връща итератор, който сочи към намерения елемент.
const_iterator намери ( конст ключ_тип и к ) конст ;
Тази версия е приложима, когато „unordered_map“ е квалифицирана константа. Връща постоянен итератор с поведение, подобно на неконстантната версия.
Параметри:
Необходим е един параметър, „k“, който е ключът за търсене в рамките на „unordered_map“.
Върната стойност:
Върнатата стойност зависи от квалификацията на обекта „unordered_map“.
Методът връща непостоянен итератор, ако обектът не е постоянно квалифициран.
Ако обектът е квалифициран като константа, методът връща константен итератор.
Времева сложност:
Времевата сложност на std::unordered_map::find() е от решаващо значение за разбирането на неговата ефективност:
В средния случай времевата сложност е постоянна (O(1)), което го прави много ефективен за типични случаи на употреба.
В най-лошия случай сложността на времето става линейна (O(n)). Този сценарий обаче е рядък на практика.
Пример 1:
Нека разгледаме практически пример, за да илюстрираме използването и предимствата на unordered_map::find(). В този пример се създава „unordered_map“ със знаците като ключове и съответните цели числа като стойности. Функцията find() намира елемента, който е свързан с ключа на 'p'. Итераторът “ittr” е свързан с намерения елемент и неговите данни се отпечатват на конзолата. Вижте следния код:
#include#include
използване на пространство от имена std ;
вътр основен ( невалиден ) {
неподредена_карта < въглен , вътр > unomp = {
{ 'в' , 9 } ,
{ 'а' , 6 } ,
{ 'p' , 8 } ,
{ 'м' , 3 } ,
{ 'с' , 4 } } ;
Автоматичен т.т = unomp. намирам ( 'p' ) ;
cout << 'Итератор' ' << ittr->първи << ' ' сочи към = ' << т.т -> второ << endl ;
връщане 0 ; }
Нека разбием кода, за да имаме ясно и по-добро разбиране за него:
#include#include
Включени са необходимите заглавни файлове:
Пространството от имена 'std' опростява кода. Позволява ви да използвате елементите от стандартната C++ библиотека, без да им поставяте префикс „std::“.
неподредена_карта < въглен , вътр > unomp = { { 'в' , 9 } , { 'а' , 6 } , { 'p' , 8 } , { 'м' , 3 } , { 'с' , 4 } } ;Създава се „unordered_map“ с име „um“ със знаците („w“, „a“, „p“, „m“, „s“) като ключове и съответните цели числа (9, 6, 8, 3, 4 ) като стойности.
Автоматичен т.т = unomp. намирам ( 'p' ) ;Функцията find() се използва за търсене на елемента с ключа „p“ в „unordered_map“, който е „unomp“. Итераторът “ittr” сочи към идентифицирания елемент.
cout << 'Итератор' ' << ittr->първи << ' ' сочи към = ' << т.т -> второ << endl ;Съдържанието, към което сочи итераторът, се отпечатва на конзолата. В този случай той отпечатва ключа („p“) и свързаната стойност (8).
връщане 0 ;Програмата прекратява, връщайки 0, за да покаже успешно изпълнение.
Резултатът от кода е даден в следното за ваша справка:
Този код е прост пример за използване на unordered_map::find() за ефективно търсене и достъп до елементите в рамките на „unordered_map“. Итераторът осигурява удобен начин за достъп както до ключа, така и до свързаната стойност на намерения елемент.
Пример 2:
Ето още един прост пример за функцията unordered_map::find(). Този код демонстрира използването на „unordered_map“ за съхраняване на булевите стойности, свързани с целочислени ключове, и след това използва функцията find(), за да провери съществуването на конкретни ключове. Нека да видим следния код и след това да разберем как работи:
#includeизползване на пространство от имена std ;
вътр основен ( ) {
неподредена_карта < вътр , bool > unomp ;
unomp [ 2 ] = вярно ;
unomp [ 67 ] = невярно ;
unomp [ Четири пет ] = вярно ;
unomp [ 98 ] = невярно ;
ако ( unomp. намирам ( 67 ) == unomp. край ( ) )
cout << „Елементът не е намерен“ << endl ;
друго
cout << „Намерен елемент“ << endl ;
ако ( unomp. намирам ( 42 ) == unomp. край ( ) )
cout << „Елементът не е намерен“ << endl ;
друго
cout << „Намерен елемент“ << endl ;
връщане 0 ;
}
Ето подробно описание на кода:
#includeТози ред включва заглавен файл, който покрива най-стандартните C++ библиотеки, които често се използват в конкурентно програмиране. Въпреки това, при обикновена разработка на C++ се препоръчва да включите специфичните заглавки.
неподредена_карта < вътр , bool > unomp ;Създава се „unordered_map“ с име „unomp“ с целочислени ключове и булеви стойности.
unomp [ 2 ] = вярно ;unomp [ 67 ] = невярно ;
unomp [ Четири пет ] = вярно ;
unomp [ 98 ] = невярно ;
Двойките ключ-стойност се вмъкват в „unordered_map“. Всеки ключ (цяло число) е свързан с булева стойност.
ако ( unomp. намирам ( 67 ) == unomp. край ( ) )cout << „Елементът не е намерен“ << endl ;
друго
cout << „Намерен елемент“ << endl ;
Функцията find() се използва в рамките на условието if-else за търсене на конкретни ключове (67 и 42) в рамките на „unordered_map“. Ако ключът бъде намерен, се отпечатва „Намерен елемент“. В противен случай се отпечатва „Елементът не е намерен“. Вижте следния резултат:
Този код показва основното използване на „unordered_map“ и функцията find() за определяне на наличието или отсъствието на конкретни ключове в картата.
Пример 3:
Нека разгледаме друг пример, който демонстрира намирането на стойност чрез предоставяне на вход по време на изпълнение. Тази проста програма използва “unordered_map” за съхраняване на имената (като ключове) и свързаните числени стойности (в този случай представляващи някои атрибути). След това подканва потребителя да въведе име, да потърси това име в картата с помощта на функцията find() и да отпечата свързаната стойност, ако името бъде намерено. Кодът е даден по-долу за ваша справка:
#include#include <низ>
#include
използване на пространство от имена std ;
вътр основен ( ) {
std :: неподредена_карта < std :: низ , двойно > unomp = {
{ 'Хери' , 23 } ,
{ 'Други' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
низ кой ;
cout << 'Кого търсите? ' ;
getline ( храня се , СЗО ) ;
неподредена_карта < низ , двойно >:: const_iterator намери = unomp. намирам ( СЗО ) ;
ако ( намери == unomp. край ( ) )
cout << 'не е намерен' ;
друго
cout << endl << намери -> първи << 'е' << намери -> второ << endl ;
връщане 0 ;
}
Следното е разбивка на кода за ваше разбиране:
неподредена_карта < низ , двойно > unomp = { } ;Създава се „unordered_map“ с име „unomp“ с низови ключове (имена) и двойни стойности.
низ кой ;Потребителят е подканен да въведе име на екрана и въведеното се съхранява в променливата на низа „кой“.
неподредена_карта < низ , двойно >:: const_iterator намери = unomp. намирам ( СЗО ) ;Функцията find() се използва за търсене на въведеното име в “unordered_map”. Резултатът се съхранява в итератора „fnd“.
ако ( намери == unomp. край ( ) )cout << 'не е намерен' ;
друго
cout << endl << намери -> първи << 'е' << намери -> второ << endl ;
Ако итераторът „fnd“ достигне края на „unordered_map“ (end()), това означава, че името не е намерено и се отпечатва „not found“. В противен случай името и свързаната с него стойност се отпечатват. Ето резултата от кода:
Този код по същество действа като прост инструмент за търсене на имена, използвайки „unordered_map“. Той приема въвеждането на потребителя, търси името в картата и предоставя свързаната стойност, ако името бъде намерено.
Заключение
Функцията unordered_map::find() в C++ осигурява мощен механизъм за ефективно локализиране на елементите в контейнерите „unordered_map“. Неговата постоянна средна времева сложност го прави предпочитан избор за операции за търсене в сценарии, при които двойките ключ-стойност трябва да бъдат достъпни бързо. Предоставените примери показват неговата практическа употреба, като подчертават нейната простота и ефективност. В заключение, овладяването на функцията unordered_map::find() подобрява способността на C++ програмиста да използва пълния потенциал на контейнерите „unordered_map“, допринасяйки за създаването на оптимизирани и високопроизводителни приложения.