Az Unordered_Map::Find()
Az unordered_map::find() függvény arra szolgál, hogy megkeresse az „unordered_map”-en belül egy adott kulcshoz társított elemet. A deklarációja attól függően változik, hogy az objektum állandó minősítésű-e vagy sem, ami rugalmasságot biztosít a használatában.
iterátor keresés ( const kulcs_típus & k ) ;Ez akkor használatos, ha az „unordered_map” nem állandó minősítésű. Ez a kód egy iterátort ad vissza, amely a talált elemre mutat.
const_iterator keresés ( const kulcs_típus & k ) const ;
Ez a verzió akkor alkalmazható, ha az „unordered_map” állandó minősítésű. A nem állandó változathoz hasonló viselkedésű állandó iterátort ad vissza.
Paraméterek:
Egyetlen „k” paraméterre van szükség, amely az „unordered_map”-ben keresendő kulcs.
Visszatérési érték:
A visszatérési érték az „unordered_map” objektum minősítésétől függ.
A metódus nem állandó iterátort ad vissza, ha az objektum nem folyamatosan minősített.
Ha az objektum állandó minősítésű, a metódus egy állandó iterátort ad vissza.
Időbeli összetettség:
Az std::unordered_map::find() időbeli összetettsége kulcsfontosságú a hatékonyságának megértéséhez:
Átlagos esetben az időbonyolultság állandó (O(1)), ami rendkívül hatékony a tipikus felhasználási esetekben.
A legrosszabb forgatókönyv esetén az időbonyolultság lineárissá válik (O(n)). Ez a forgatókönyv azonban ritka a gyakorlatban.
1. példa:
Nézzünk meg egy gyakorlati példát az unordered_map::find() használatának és előnyeinek szemléltetésére. Ebben a példában egy „unordered_map” jön létre a karakterekkel kulcsként és a megfelelő egész számokkal értékként. A find() függvény megkeresi azt az elemet, amely a „p” kulcshoz kapcsolódik. Az ittr iterátor hozzá van kapcsolva a talált elemhez, és adatai kinyomtatásra kerülnek a konzolra. Lásd a következő kódot:
#include#include
névtér std használatával ;
int fő- ( üres ) {
rendezetlen_térkép < char , int > unomp = {
{ 'Ban ben' , 9 } ,
{ 'a' , 6 } ,
{ 'p' , 8 } ,
{ 'én' , 3 } ,
{ 's' , 4 } } ;
auto ittr = unomp. megtalálja ( 'p' ) ;
cout << 'Iterátor' ' << ittr->első << ' ' mutat rá = ' << ittr -> második << endl ;
Visszatérés 0 ; }
Bontsuk fel a kódot, hogy világosan és jobban megértsük:
#include#include
A szükséges fejlécfájlokat tartalmazza:
Az „std” névtér leegyszerűsíti a kódot. Lehetővé teszi a szabványos C++ könyvtár elemeinek használatát anélkül, hogy „std::” előtagot írna elő.
rendezetlen_térkép < char , int > unomp = { { 'Ban ben' , 9 } , { 'a' , 6 } , { 'p' , 8 } , { 'én' , 3 } , { 's' , 4 } } ;Létrejön egy „um” nevű „unordered_map” karakterekkel ('w', 'a', 'p', 'm', 's') és a megfelelő egész számokkal (9, 6, 8, 3, 4). ) értékként.
auto ittr = unomp. megtalálja ( 'p' ) ;A find() függvény arra szolgál, hogy megkeresse az elemet a „p” billentyűvel az „unordered_map”-ben, ami „unomp”. Az „ittr” iterátor az azonosított elemre mutat.
cout << 'Iterátor' ' << ittr->első << ' ' mutat erre = ' << ittr -> második << endl ;Az iterátor által mutatott tartalom a konzolra kerül kinyomtatásra. Ebben az esetben kiírja a kulcsot („p”) és a hozzá tartozó értéket (8).
Visszatérés 0 ;A program leáll, és 0-t ad vissza, jelezve a sikeres végrehajtást.
A kód kimenete az alábbiakban található referenciaként:
Ez a kód egy egyszerű példa az unordered_map::find() használatára az „unordered_map” elemeinek hatékony keresésére és elérésére. Az iterátor kényelmes módot biztosít a kulcs és a talált elem társított értékének eléréséhez.
2. példa:
Íme egy másik egyszerű példa az unordered_map::find() függvényre. Ez a kód bemutatja az „unordered_map” használatát az egész kulcsokhoz társított logikai értékek tárolására, majd a find() függvényt használja bizonyos kulcsok meglétének ellenőrzésére. Lássuk a következő kódot, és értsük meg, hogyan működik:
#includenévtér std használatával ;
int fő- ( ) {
rendezetlen_térkép < int , bool > unomp ;
unomp [ 2 ] = igaz ;
unomp [ 67 ] = hamis ;
unomp [ Négy öt ] = igaz ;
unomp [ 98 ] = hamis ;
ha ( unomp. megtalálja ( 67 ) == unomp. vége ( ) )
cout << 'Az elem nem található' << endl ;
más
cout << 'Elem található' << endl ;
ha ( unomp. megtalálja ( 42 ) == unomp. vége ( ) )
cout << 'Az elem nem található' << endl ;
más
cout << 'Elem található' << endl ;
Visszatérés 0 ;
}
Itt található a kód részletes leírása:
#includeEz a sor egy fejlécfájlt tartalmaz, amely lefedi a legtöbb szabványos C++ könyvtárat, amelyet gyakran használnak a versenyprogramozásban. A szokásos C++ fejlesztéseknél azonban ajánlatos az adott fejléceket belefoglalni.
rendezetlen_térkép < int , bool > unomp ;Egy „unordered_map” nevű „unomp” jön létre egész kulcsokkal és logikai értékekkel.
unomp [ 2 ] = igaz ;unomp [ 67 ] = hamis ;
unomp [ Négy öt ] = igaz ;
unomp [ 98 ] = hamis ;
A kulcs-érték párok az „unordered_map”-be kerülnek. Minden kulcshoz (egész számhoz) tartozik egy logikai érték.
ha ( unomp. megtalálja ( 67 ) == unomp. vége ( ) )cout << 'Az elem nem található' << endl ;
más
cout << 'Elem található' << endl ;
A find() függvényt az if-else feltételen belül alkalmazzuk bizonyos kulcsok (67 és 42) keresésére az „unordered_map”-en belül. Ha a rendszer megtalálja a kulcsot, az „Elem található” kerül kinyomtatásra. Ellenkező esetben az „Elem nem található” felirat kerül kinyomtatásra. Lásd a következő kimenetet:
Ez a kód bemutatja az „unordered_map” és a find() függvény alapvető használatát, amellyel meghatározható, hogy bizonyos kulcsok vannak-e vagy hiányoznak a térképen.
3. példa:
Nézzünk meg egy másik példát, amely bemutatja egy érték megtalálását úgy, hogy futási időben megad egy bemenetet. Ez az egyszerű program egy „unordered_map”-et használ a nevek (kulcsokként) és a kapcsolódó számértékek (jelen esetben néhány attribútumra) tárolására. Ezután felszólítja a felhasználót, hogy írjon be egy nevet, keresse meg a nevet a térképen a find() függvény segítségével, és nyomtassa ki a kapcsolódó értéket, ha a név megtalálható. A kód az alábbiakban található referenciaként:
#include#include
#include
névtér std használatával ;
int fő- ( ) {
std :: rendezetlen_térkép < std :: húr , kettős > unomp = {
{ 'Herry' , 23 } ,
{ 'Mások' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
húr ki ;
cout << 'Kit keresel? ' ;
getline ( enni , WHO ) ;
rendezetlen_térkép < húr , kettős >:: const_iterator fnd = unomp. megtalálja ( WHO ) ;
ha ( fnd == unomp. vége ( ) )
cout << 'nem található' ;
más
cout << endl << fnd -> első << 'van' << fnd -> második << endl ;
Visszatérés 0 ;
}
Az alábbiakban a kód lebontása látható, hogy megértse:
rendezetlen_térkép < húr , kettős > unomp = { } ;Egy „unomp” nevű „unordered_map” jön létre karakterlánc-kulcsokkal (nevekkel) és kettős értékekkel.
húr ki ;A felhasználónak meg kell adnia egy nevet a képernyőn, és a bevitel a „who” karakterlánc változóban tárolódik.
rendezetlen_térkép < húr , kettős >:: const_iterator fnd = unomp. megtalálja ( WHO ) ;A find() függvény a beírt név megkeresésére szolgál az „unordered_map”-ben. Az eredmény az „fnd” iterátorban tárolódik.
ha ( fnd == unomp. vége ( ) )cout << 'nem található' ;
más
cout << endl << fnd -> első << 'van' << fnd -> második << endl ;
Ha az „fnd” iterátor eléri az „unordered_map” (end()) végét, az azt jelenti, hogy a név nem található, és a „not found” kerül kinyomtatásra. Ellenkező esetben a név és a hozzá tartozó érték kinyomtatásra kerül. Íme a kód kimenete:
Ez a kód lényegében egy egyszerű névkereső eszközként működik egy „unordered_map” használatával. Felveszi a felhasználói bevitelt, megkeresi a nevet a térképen, és megadja a kapcsolódó értéket, ha a név megtalálható.
Következtetés
A C++ unordered_map::find() függvénye hatékony mechanizmust biztosít az elemek hatékony megtalálásához az „unordered_map” tárolókban. Állandó átlagos időbonyolultsága miatt előnyben részesített választás a keresési műveletekhez olyan forgatókönyvekben, ahol a kulcs-érték párokhoz gyorsan kell hozzáférni. A bemutatott példák bemutatják annak gyakorlati használatát, hangsúlyozva egyszerűségét és hatékonyságát. Összefoglalva, az unordered_map::find() függvény elsajátítása javítja a C++ programozó azon képességét, hogy kihasználja az „unordered_map” konténerekben rejlő lehetőségeket, hozzájárulva az optimalizált és nagy teljesítményű alkalmazások létrehozásához.