Porozumění Unordered_Map::Find()
Funkce unordered_map::find() je navržena k vyhledání prvku, který je spojen se zadaným klíčem v rámci „unordered_map“. Jeho deklarace se liší v závislosti na tom, zda je objekt konstantní nebo ne, což poskytuje flexibilitu v jeho použití.
najít iterátor ( konst key_type & k ) ;Toto se používá, když „unordered_map“ není konstantní. Tento kód vrací iterátor, který ukazuje na nalezený prvek.
const_iterator najít ( konst key_type & k ) konst ;
Tato verze je použitelná, když je „uordered_map“ konstantní. Vrací konstantní iterátor s podobným chováním jako nekonstantní verze.
Parametry:
Vyžaduje jediný parametr, „k“, což je klíč, který se má hledat v „unordered_map“.
Návratová hodnota:
Vrácená hodnota závisí na kvalifikaci objektu „unordered_map“.
Metoda vrací nekonstantní iterátor, pokud objekt není neustále kvalifikovaný.
Pokud je objekt kvalifikovaný jako konstantní, metoda vrací konstantní iterátor.
Časová náročnost:
Časová složitost std::unordered_map::find() je zásadní pro pochopení její účinnosti:
V průměrném případě je časová složitost konstantní (O(1)), díky čemuž je pro typické případy použití vysoce efektivní.
V nejhorším případě se časová složitost stane lineární (O(n)). Tento scénář je však v praxi vzácný.
Příklad 1:
Podívejme se na praktický příklad, který ilustruje použití a výhody unordered_map::find(). V tomto příkladu je vytvořena „unordered_map“ se znaky jako klíči a odpovídajícími celými čísly jako hodnotami. Funkce find() vyhledá prvek, který je spojen s klíčem „p“. Iterátor „ittr“ je propojen s nalezeným prvkem a jeho data jsou vytištěna na konzoli. Viz následující kód:
#include#include
pomocí jmenného prostoru std ;
int hlavní ( prázdnota ) {
neuspořádaná_mapa < char , int > neokázalý = {
{ 'V' , 9 } ,
{ 'A' , 6 } ,
{ 'p' , 8 } ,
{ 'm' , 3 } ,
{ 's' , 4 } } ;
auto ittr = neokázalý. nalézt ( 'p' ) ;
cout << 'Iterátor' ' << ittr->prvni << ' 'ukazuje na =' << ittr -> druhý << endl ;
vrátit se 0 ; }
Pojďme si kód rozebrat, abychom mu jasně a lépe porozuměli:
#include#include
Jsou zahrnuty potřebné hlavičkové soubory:
Jmenný prostor „std“ zjednodušuje kód. Umožňuje vám používat prvky ze standardní knihovny C++, aniž byste jim dávali předponu „std::“.
neuspořádaná_mapa < char , int > neokázalý = { { 'V' , 9 } , { 'A' , 6 } , { 'p' , 8 } , { 'm' , 3 } , { 's' , 4 } } ;Vytvoří se „neuspořádaná_mapa“ s názvem „um“ se znaky („w“, „a“, „p“, „m“, „s“) jako klíči a odpovídajícími celými čísly (9, 6, 8, 3, 4 ) jako hodnoty.
auto ittr = neokázalý. nalézt ( 'p' ) ;Funkce find() se používá k vyhledání prvku s klíčem „p“ v „unordered_map“, což je „unomp“. Iterátor „ittr“ ukazuje na identifikovaný prvek.
cout << 'Iterátor' ' << ittr->prvni << ' 'ukazuje na =' << ittr -> druhý << endl ;Obsah, na který odkazuje iterátor, se vytiskne do konzoly. V tomto případě vytiskne klíč („p“) a přidruženou hodnotu (8).
vrátit se 0 ;Program se ukončí a vrátí 0, což znamená úspěšné provedení.
Výstup kódu je uveden níže pro vaši referenci:
Tento kód je jednoduchým příkladem využití unordered_map::find() k efektivnímu vyhledávání a přístupu k prvkům v „unordered_map“. Iterátor poskytuje pohodlný způsob přístupu jak ke klíči, tak k přidružené hodnotě nalezeného prvku.
Příklad 2:
Zde je další jednoduchý příklad funkce unordered_map::find(). Tento kód demonstruje použití „unordered_map“ k uložení booleovských hodnot spojených s celočíselnými klíči a poté využívá funkci find() ke kontrole existence konkrétních klíčů. Podívejme se na následující kód a pak pochopíme, jak to funguje:
#includepomocí jmenného prostoru std ;
int hlavní ( ) {
neuspořádaná_mapa < int , bool > neokázalý ;
neokázalý [ 2 ] = skutečný ;
neokázalý [ 67 ] = Nepravdivé ;
neokázalý [ Čtyři pět ] = skutečný ;
neokázalý [ 98 ] = Nepravdivé ;
-li ( neokázalý. nalézt ( 67 ) == neokázalý. konec ( ) )
cout << 'Prvek nenalezen' << endl ;
jiný
cout << 'Prvek nalezen' << endl ;
-li ( neokázalý. nalézt ( 42 ) == neokázalý. konec ( ) )
cout << 'Prvek nenalezen' << endl ;
jiný
cout << 'Prvek nalezen' << endl ;
vrátit se 0 ;
}
Zde je podrobný popis kódu:
#includeTento řádek obsahuje hlavičkový soubor, který pokrývá většinu standardních knihoven C++, které se často používají v konkurenčním programování. Při běžném vývoji C++ se však doporučuje zahrnout konkrétní záhlaví.
neuspořádaná_mapa < int , bool > neokázalý ;Vytvoří se „unordered_map“ s názvem „unomp“ s celočíselnými klíči a booleovskými hodnotami.
neokázalý [ 2 ] = skutečný ;neokázalý [ 67 ] = Nepravdivé ;
neokázalý [ Čtyři pět ] = skutečný ;
neokázalý [ 98 ] = Nepravdivé ;
Páry klíč–hodnota jsou vloženy do „unordered_map“. Každý klíč (celé číslo) je spojen s logickou hodnotou.
-li ( neokázalý. nalézt ( 67 ) == neokázalý. konec ( ) )cout << 'Prvek nenalezen' << endl ;
jiný
cout << 'Prvek nalezen' << endl ;
Funkce find() se používá v rámci podmínky if-else k hledání konkrétních klíčů (67 a 42) v rámci „unordered_map“. Pokud je klíč nalezen, vytiskne se „Nalezen prvek“. V opačném případě se vytiskne „Element not found“. Podívejte se na následující výstup:
Tento kód ukazuje základní použití „unordered_map“ a funkce find() k určení přítomnosti nebo nepřítomnosti konkrétních klíčů v mapě.
Příklad 3:
Podívejme se na další příklad, který demonstruje nalezení hodnoty poskytnutím vstupu za běhu. Tento jednoduchý program používá „unordered_map“ k uložení jmen (jako klíče) a souvisejících číselných hodnot (v tomto případě představujících některé atributy). Poté vyzve uživatele, aby zadal jméno, vyhledal toto jméno v mapě pomocí funkce find() a vytiskl přidruženou hodnotu, pokud je jméno nalezeno. Kód je uveden níže pro vaši informaci:
#include#include <řetězec>
#include
pomocí jmenného prostoru std ;
int hlavní ( ) {
std :: neuspořádaná_mapa < std :: tětiva , dvojnásobek > neokázalý = {
{ 'herry' , 23 } ,
{ 'ostatní' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
řetězec kdo ;
cout << 'Koho hledáš? ' ;
getline ( jíst , SZO ) ;
neuspořádaná_mapa < tětiva , dvojnásobek >:: const_iterator najít = neokázalý. nalézt ( SZO ) ;
-li ( najít == neokázalý. konec ( ) )
cout << 'nenalezeno' ;
jiný
cout << endl << najít -> První << ' je ' << najít -> druhý << endl ;
vrátit se 0 ;
}
Níže je uveden rozpis kódu pro pochopení:
neuspořádaná_mapa < tětiva , dvojnásobek > neokázalý = { } ;Vytvoří se „unordered_map“ s názvem „unomp“ s řetězcovými klíči (jmény) a dvojitými hodnotami.
řetězec kdo ;Uživatel je na obrazovce vyzván k zadání jména a vstup se uloží do řetězcové proměnné „kdo“.
neuspořádaná_mapa < tětiva , dvojnásobek >:: const_iterator najít = neokázalý. nalézt ( SZO ) ;Funkce find() se používá k vyhledání zadaného jména v „unordered_map“. Výsledek je uložen v iterátoru „fnd“.
-li ( najít == neokázalý. konec ( ) )cout << 'nenalezeno' ;
jiný
cout << endl << najít -> První << ' je ' << najít -> druhý << endl ;
Pokud iterátor „fnd“ dosáhne konce „unordered_map“ (end()), znamená to, že název nebyl nalezen a vytiskne se „nenalezeno“. Jinak se vytiskne název a přidružená hodnota. Zde je výstup kódu:
Tento kód v podstatě funguje jako jednoduchý nástroj pro vyhledávání názvu pomocí „unordered_map“. Převezme vstup od uživatele, vyhledá název v mapě a poskytne související hodnotu, pokud je název nalezen.
Závěr
Funkce unordered_map::find() v C++ poskytuje výkonný mechanismus pro efektivní lokalizaci prvků v kontejnerech „unordered_map“. Jeho konstantní průměrná časová složitost z něj dělá preferovanou volbu pro vyhledávací operace ve scénářích, kde je potřeba rychle přistupovat k párům klíč-hodnota. Uvedené příklady ukazují jeho praktické využití s důrazem na jeho jednoduchost a efektivitu. Závěrem lze říci, že zvládnutí funkce unordered_map::find() zlepšuje schopnost programátorů C++ využít plný potenciál kontejnerů „unordered_map“, což přispívá k vytváření optimalizovaných a vysoce výkonných aplikací.