Функция C++ Unordered_Map::Find().

Funkcia C Unordered Map Find



C++ е известен със своята мощна и гъвкава библиотека със стандартни шаблони (STL), предоставяща на разработчиците обширен набор от готови за използване, високоефективни контейнери, итератори, алгоритми и функции. Сред тях „unordered_map“ се откроява като ключов играч в ефективното съхранение на ключ-стойност и високоскоростен достъп, което го прави отличен избор за приложения, където бързото извличане е от първостепенно значение. В сърцето на тази “unordered_map” функцията unordered_map::find() е жизненоважен инструмент. Тази структура на данните е оптимизирана за високоскоростен достъп и съхранение на ключ-стойност. Тази статия предлага цялостен преглед на функцията unordered_map::find(), като разкрива нейния синтаксис и параметри с помощта на илюстративни примери.

Разбиране на 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

Включени са необходимите заглавни файлове: за входно/изходни операции и за използване на контейнера „unordered_map“.

използване на пространство от имена std ;

Пространството от имена '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“, допринасяйки за създаването на оптимизирани и високопроизводителни приложения.