Разумевање Унордеред_Мап::Финд()
Функција унордеред_мап::финд() је дизајнирана да лоцира елемент који је повезан са одређеним кључем унутар „унордеред_мап“. Његова декларација варира у зависности од тога да ли је објекат константно квалификован или не, пружајући флексибилност у његовој употреби.
итератор финд ( конст тип_кључа & к ) ;Ово се користи када „унордеред_мап“ није константно квалификована. Овај код враћа итератор који указује на пронађени елемент.
цонст_итератор пронађи ( конст тип_кључа & к ) конст ;
Ова верзија је применљива када је „унордеред_мап“ константно квалификована. Враћа константни итератор са сличним понашањем неконстантне верзије.
Параметри:
Потребан је један параметар, „к“, који је кључ који треба претраживати унутар „унордеред_мап“.
Повратна вредност:
Повратна вредност зависи од квалификације „унордеред_мап“ објекта.
Метод враћа неконстантни итератор ако објекат није стално квалификован.
Ако је објекат константно квалификован, метода враћа константни итератор.
Временска сложеност:
Временска сложеност стд::унордеред_мап::финд() је кључна за разумевање његове ефикасности:
У просечном случају, временска сложеност је константна (О(1)), што га чини веома ефикасним за типичне случајеве употребе.
У најгорем случају, временска сложеност постаје линеарна (О(н)). Међутим, овај сценарио је реткост у пракси.
Пример 1:
Хајде да истражимо практичан пример да бисмо илустровали употребу и предности унордеред_мап::финд(). У овом примеру, креирана је „унордеред_мап“ са знаковима као кључевима и одговарајућим целим бројевима као вредностима. Функција финд() лоцира елемент који је повезан са кључем „п“. Итератор „иттр“ је повезан са пронађеним елементом и његови подаци се штампају на конзоли. Погледајте следећи код:
#инцлуде <иостреам>#инцлуде <унордеред_мап>
користећи простор имена стд ;
инт главни ( празнина ) {
унордеред_мап < цхар , инт > уномп = {
{ 'у' , 9 } ,
{ 'а' , 6 } ,
{ 'п' , 8 } ,
{ 'м' , 3 } ,
{ 'с' , 4 } } ;
ауто иттр = уномп. наћи ( 'п' ) ;
цоут << 'Итератор' ' << иттр->први << ' ' указује на = ' << иттр -> друго << ендл ;
повратак 0 ; }
Хајде да рашчланимо код да бисмо га боље разумели:
#инцлуде <иостреам>#инцлуде <унордеред_мап>
Укључене су неопходне датотеке заглавља: <иостреам> за улазне/излазне операције и <унордеред_мап> за коришћење контејнера „унордеред_мап”.
користећи простор имена стд ;Именски простор „стд“ поједностављује код. Омогућава вам да користите елементе из стандардне Ц++ библиотеке без додавања префикса „стд::“.
унордеред_мап < цхар , инт > уномп = { { 'у' , 9 } , { 'а' , 6 } , { 'п' , 8 } , { 'м' , 3 } , { 'с' , 4 } } ;Креира се „унордеред_мап“ под називом „ум“ са знаковима ('в', 'а', 'п', 'м', 'с') као кључевима и одговарајућим целим бројевима (9, 6, 8, 3, 4 ) као вредности.
ауто иттр = уномп. наћи ( 'п' ) ;Функција финд() се користи за тражење елемента са кључем „п“ у „унордеред_мап“ који је „уномп“. Итератор „иттр“ указује на идентификовани елемент.
цоут << 'Итератор' ' << иттр->први << ' ' указује на = ' << иттр -> друго << ендл ;Садржај на који указује итератор се штампа на конзоли. У овом случају штампа кључ („п“) и одговарајућу вредност (8).
повратак 0 ;Програм се завршава, враћајући 0 да би означио успешно извршење.
Излаз кода је дат у следећем за вашу референцу:
Овај код је једноставан пример коришћења унордеред_мап::финд() за ефикасно тражење и приступ елементима унутар „унордеред_мап“. Итератор пружа згодан начин за приступ и кључу и придруженој вредности пронађеног елемента.
Пример 2:
Ево још једног једноставног примера функције унордеред_мап::финд(). Овај код показује употребу „унордеред_мап“ за чување Булових вредности повезаних са целобројним кључевима, а затим користи функцију финд() да провери постојање одређених кључева. Хајде да видимо следећи код и онда разумемо како функционише:
#инцлуде <битс/стдц++.х>користећи простор имена стд ;
инт главни ( ) {
унордеред_мап < инт , боол > уномп ;
уномп [ 2 ] = истина ;
уномп [ 67 ] = лажно ;
уномп [ Четири, пет ] = истина ;
уномп [ 98 ] = лажно ;
ако ( уномп. наћи ( 67 ) == уномп. крај ( ) )
цоут << „Елемент није пронађен“ << ендл ;
друго
цоут << 'Пронађен елемент' << ендл ;
ако ( уномп. наћи ( 42 ) == уномп. крај ( ) )
цоут << „Елемент није пронађен“ << ендл ;
друго
цоут << 'Пронађен елемент' << ендл ;
повратак 0 ;
}
Ево детаљног описа кода:
#инцлуде <битс/стдц++.х>Ова линија укључује датотеку заглавља која покрива најстандардније Ц++ библиотеке које се често користе у конкурентском програмирању. Међутим, у редовном развоју Ц++-а, препоручује се укључивање специфичних заглавља.
унордеред_мап < инт , боол > уномп ;Креира се „унордеред_мап“ под називом „уномп“ са целобројним кључевима и Буловим вредностима.
уномп [ 2 ] = истина ;уномп [ 67 ] = лажно ;
уномп [ Четири, пет ] = истина ;
уномп [ 98 ] = лажно ;
Парови кључ/вредност се убацују у „унордеред_мап“. Сваки кључ (цео број) је повезан са Буловом вредношћу.
ако ( уномп. наћи ( 67 ) == уномп. крај ( ) )цоут << „Елемент није пронађен“ << ендл ;
друго
цоут << 'Пронађен елемент' << ендл ;
Функција финд() се користи унутар услова иф-елсе за тражење одређених кључева (67 и 42) унутар „унордеред_мап“. Ако је кључ пронађен, штампа се „Елемент фоунд”. У супротном, штампа се „Елемент није пронађен“. Погледајте следећи излаз:
Овај код приказује основну употребу „унордеред_мап“ и функције финд() за одређивање присуства или одсуства одређених кључева на мапи.
Пример 3:
Хајде да истражимо још један пример који демонстрира проналажење вредности обезбеђивањем уноса током времена извршавања. Овај једноставан програм користи „унордеред_мап“ за чување имена (као кључева) и повезаних нумеричких вредности (у овом случају, које представљају неке атрибуте). Затим од корисника тражи да унесе име, потражи то име на мапи помоћу функције финд() и одштампа придружену вредност ако се пронађе име. Код је дат у следећем за вашу референцу:
#инцлуде <иостреам>#инцлуде <стринг>
#инцлуде <унордеред_мап>
користећи простор имена стд ;
инт главни ( ) {
стд :: унордеред_мап < стд :: низ , дупло > уномп = {
{ 'Хери' , 23 } ,
{ 'други' , 7.4 } ,
{ 'Калсом' , 1.2 } } ;
низати ко ;
цоут << 'Кога тражиш? ' ;
гетлине ( једење , СЗО ) ;
унордеред_мап < низ , дупло >:: цонст_итератор фнд = уномп. наћи ( СЗО ) ;
ако ( фнд == уномп. крај ( ) )
цоут << 'није пронађен' ;
друго
цоут << ендл << фнд -> први << 'је' << фнд -> друго << ендл ;
повратак 0 ;
}
Следи преглед кода за ваше разумевање:
унордеред_мап < низ , дупло > уномп = { } ;„унордеред_мап“ под називом „уномп“ се креира са стринг кључевима (именима) и двоструким вредностима.
низати ко ;Од корисника се тражи да унесе име на екрану, а унос се чува у стринг променљивој „вхо“.
унордеред_мап < низ , дупло >:: цонст_итератор фнд = уномп. наћи ( СЗО ) ;Функција финд() се користи за тражење унетог имена у „унордеред_мап“. Резултат се чува у итератору „фнд“.
ако ( фнд == уномп. крај ( ) )цоут << 'није пронађен' ;
друго
цоут << ендл << фнд -> први << 'је' << фнд -> друго << ендл ;
Ако итератор „фнд“ дође до краја „унордеред_мап“ (енд()), то значи да име није пронађено и да је „нот фоунд“ одштампано. У супротном, име и његова придружена вредност се штампају. Ево излаза кода:
Овај код у суштини делује као једноставан алат за тражење имена користећи „унордеред_мап“. Узима кориснички унос, тражи име на мапи и пружа одговарајућу вредност ако се име пронађе.
Закључак
Функција унордеред_мап::финд() у Ц++-у пружа моћан механизам за ефикасно лоцирање елемената унутар „унордеред_мап” контејнера. Његова константна просечна временска сложеност чини га пожељним избором за операције претраживања у сценаријима где се паровима кључ-вредност мора приступити брзо. Наведени примери показују његову практичну употребу, наглашавајући његову једноставност и ефикасност. У закључку, савладавање функције унордеред_мап::финд() побољшава способност Ц++ програмера да искористи пуни потенцијал „унордеред_мап“ контејнера, доприносећи креирању оптимизованих апликација високих перформанси.