Térkép be C++ Szabványos sablonkönyvtár (STL)

Miben van a térkép C++? Szintaxis

In C++Egy MAP egy asszociatív tároló, amely az elemeket leképezett formában tárolja. A térkép minden eleme kulcsértékből és egy leképezett értékből áll. Két leképezett érték nem oszthatja meg ugyanazokat a kulcsértékeket.

A kulcsértékek alkalmasak az elemek egyedi rendezésére és azonosítására. A leképezett értékek a kulccsal társított tartalom tárolására szolgálnak. A kettő típusban különbözhet, de a tagtípus kombinálja őket egy pártípuson keresztül, amely mindkettőt kombinálja.

Miért használja az std::map-et?

Íme a térkép használatának okai:

  • std:: a térkép az egyedi kulcsokat csak a kiválasztott rendezési feltételek alapján rendezett sorrendben tárolja.
  • Egyszerűen és gyorsabban kereshet elemeket a gomb segítségével.
  • Minden kulcshoz csak egy elem van rögzítve.
  • Az std::map asszociatív tömbként használható.
  • Az std::map bináris fákkal valósítható meg (kiegyensúlyozott).

Szintaxis

Az std::map deklarálásához használja a következő szintaxist:

std::map<key_datatype, value_datatype>map_name; 
  • A key_datatype a térképkulcsok adattípusát jelöli.
  • A value_datatype a leképezési kulcsoknak megfelelő értékek adattípusát jelöli.
  • A map_name a térkép neve.

Például:

map<string, int> my_map; 

nevű térképet deklaráltunk my_map. A térképen lesz egy as karakterlánc kulcs adattípusok és egész szám mint értékek adattípus.

Tagtípusok

A tagfüggvények a következő tagtípusokat használhatják paraméterként vagy visszatérési típusként:

  • key_type: Kulcs (az első paraméter a sablonban)
  • mapped_type: T (a második paraméter a sablonban)
  • key_compare: Összehasonlítás (a harmadik paraméter a sablonban)
  • allocator_type: Alloc (a negyedik paraméter a sablonban)
  • érték tipusa: pár
  • value_compare: Beágyazott függvényosztály az elemek összehasonlításához
  • referencia: allocator_type::reference
  • const_reference: allocator_type::const_reference
  • mutató: allocator_type::pointer
  • const_pointer: allocator_type::const_pointer
  • iterátor: egy kétirányú iterátor az érték_típushoz
  • const_iterator: egy kétirányú iterátor a const érték_típushoz
  • reverse_iterator: egy fordított iterátor
  • const_reverse_iterator: állandó fordított iterátor
  • differencia_típus: ptrdiff_t
  • méret típus: méret_t

Az std::map beépített funkciói

Az std::map beépített funkciókkal rendelkezik. Ezek közül néhány a következőket tartalmazza:

  • kezdődik () – Ez a függvény visszaállítja az iterátort a térkép első eleméhez.
  • méret () -Ez a függvény a térkép elemeinek számát adja vissza.
  • üres() –Ez a függvény egy logikai értéket ad vissza, amely jelzi, hogy a térkép üres-e.
  • beszúr( pár(kulcs, érték)) – Ez a függvény új kulcs-érték párt szúr be a térképbe.
  • find(val) – Ez a függvény megadja az iterátort a val elemnek, ha megtalálható. Ellenkező esetben az m.end() értéket adja vissza.
  • Törlés (iterátor pozíció) – Ez a funkció törli az iterátor által megjelölt helyen lévő elemet.
  • törlés (konst g) – Ez a funkció törli a g kulcsértéket a térképről.
  • Egyértelmű () -Ez a funkció törli az összes elemet a térképről.

Iteráció a térképelemeken keresztül

Iterálhat a térképelemek között. Egyszerűen létre kell hoznunk egy iterátort, és ezt használnunk kell.
Például:

Példa 1:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

output:

Iteráció a térképelemeken keresztül

Itt van egy képernyőkép a kódról:

Iteráció a térképelemeken keresztül

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy használni tudja a funkcióit.
  3. Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
  4. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja a main() funkció. A { a függvény törzsének kezdetét jelöli.
  6. Hozzon létre egy Tanulók nevű térképet, ahol a kulcsok egész számok, az értékek pedig karakterláncok lesznek.
  7. Szúrjon be értékeket a térképre Diákok. Egy 200-as kulcs és egy Alice érték bekerül a térképbe.
  8. Szúrjon be értékeket a térképre Diákok. A 201-es kulcs és a János értéke bekerül a térképbe.
  9. Használja a size() függvény segítségével megkaphatja a Diákok nevű térkép méretét. Ennek 2-t kell visszaadnia.
  10. Nyomtasson szöveget a konzolra.
  11. A for ciklus segítségével hozzon létre egy iterátort, amely a Tanulók nevű térkép elemei felett iterál.
  12. Nyomtassa ki a Diákok térkép értékeit a konzolon.
  13. A for ciklus törzsének vége.
  14. A test vége a main() funkciót.

Adatok beszúrása std::map-be

Az std::map-be a következővel írhat be elemeket insert() funkció. Ne feledje, hogy az std::map kulcsoknak egyedinek kell lenniük.

Tehát először ellenőrzi, hogy minden kulcs megtalálható-e a térképen. Ha jelen van, a bejegyzés nem kerül beillesztésre, de visszaadja a meglévő bejegyzés iterátorát. Ha nincs jelen, a bejegyzés beszúrásra kerül.

A függvénynek a következő változatai vannak:

  • betét(pár) – ezzel a változattal egy kulcs-érték pár kerül beillesztésre a térképbe.
  • insert(start_itr, end_itr) – ezzel a változattal a bejegyzések egy másik térkép start_itr és end_itr által meghatározott tartományába kerülnek be.

A insert_or_assing() funkció ugyanúgy működik, mint insert() függvényt, de ha az adott kulcs már létezik a térképen, akkor az értéke módosul.

Példa 2:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> m{ {1,3} , {2,4} , {3,5} };

	m.insert({ 5, 6 });
	m.insert({ 1, 8 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

output:

Adatok beszúrása std::map-be

Itt van egy képernyőkép a kódról:

Adatok beszúrása std::map-be

Kód magyarázata:

  1. Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  3. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hívja a main() funkció. A { a függvény törzsének kezdetét jelöli.
  5. Hozzon létre egy m nevű térképet, ahol a kulcsok egész számok, az értékek pedig egész számok lesznek. Három bejegyzés került a térképre.
  6. Szúrjon be egy új bejegyzést a térképre m. Egy 5-ös kulcs és egy 6-os érték kerül beillesztésre a térképbe.
  7. Megpróbál belépni egy már meglévő kulcsba. Mivel az 1-es kulcs már létezik a térképen, a bejegyzés nem történik meg.
  8. az insert_or_assign() funkció egy meglévő bejegyzés beszúrásához vagy módosításához. Mivel az 1-es kulcs már létezik, értéke 6-ra változik.
  9. Nyomtasson szöveget a konzolra. A „\t” karakter vízszintes szóközt hoz létre, míg a „\n” karakter a következő sorra mozgatja az egérkurzort.
  10. Használat hurokhoz itr nevű iterátor létrehozásához a térkép m nevű elemei feletti iterációhoz.
  11. Nyomtassa ki a térkép m értékeit a konzolon. A „\t” karakter vízszintes szóközt hoz létre az egyes billentyűk és a megfelelő érték között. Ezzel szemben a „\n” karakter minden iteráció után a következő sorra mozgatja az egérkurzort.
  12. A for hurok törzsének vége.
  13. A programnak értéket kell visszaadnia a sikeres befejezés után.
  14. A test vége a main() funkciót.

Keresés a térképen

Használhatjuk a find() funkció segítségével a kulcsok alapján kereshet elemeket a térképen. Ha a kulcs nem található, a függvény a következőt adja vissza: std::map::end. Ellenkező esetben a keresett elem iterátora kerül visszaadásra.

Példa 3:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

output:

Keresés a térképen

Itt van egy képernyőkép a kódról:

Keresés a térképen

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
  2. Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
  3. Szerelje be a térképfejléc fájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
  4. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja a main() funkció. A { jelöli a törzs kezdetét main() funkciót.
  6. Hozzon létre egy Tanulók nevű térképet, amelynek kulcsai egész számok és értékláncok lesznek.
  7. Szúrjon be értékeket a térképre Diákok. Egy 200-as kulcs és egy Alice érték bekerül a térképbe.
  8. Szúrjon be értékeket a térképre Diákok. A 201-es kulcs és a János értéke bekerül a térképbe.
  9. Keresse meg a 201-es kulcshoz tartozó értéket.
  10. Használjon if utasítást annak ellenőrzésére, hogy a kulcs értéke megtalálható-e.
  11. Nyomtassa ki a kulcs értékét néhány szöveg mellé a konzolon.
  12. Az if utasítás törzsének vége.
  13. A test vége a main() funkciót.

Adatok törlése a térképről

Használhatjuk a erase() funkcióval törölhet egy értéket a térképről. Egyszerűen létrehozunk egy iterátort, amely a törölni kívánt elemre mutat. Az iterátor ezután átkerül a erase() funkciót.

Példa 4:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

output:

Adatok törlése a térképről

Itt van egy képernyőkép a kódról:

Adatok törlése a térképről

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy használni tudja a funkcióit.
  3. Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
  4. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja a main() funkció. A { a törzsének kezdetét jelöli main() funkciót.
  6. Hozzon létre egy térképet my_map néven, amelynek kulcsai karakterláncok és értékek egész számok lesznek.
  7. Értékek beszúrása a my_map térképbe. A Cow kulcs és az 1 érték bekerül a térképbe.
  8. Értékek beszúrása a my_map térképbe. A Cat kulcs és a 2 érték bekerül a térképbe.
  9. Adjon hozzá egy 3-as értéket a my_map térképhez egy oroszlánkulccsal.
  10. Hozzon létre egy iterátort a térképen való iterációhoz a my_map a kulcsmacskát keresve.
  11. Törölje az iterátor által mutatott elemet.
  12. Használjon iterátort a my_map térkép elemeinek iterálásához az elejétől a végéig.
  13. Nyomtassa ki a térkép my_map tartalmát a konzolon.
  14. Sikeres befejezés után a programnak vissza kell adnia a kimenetet.
  15. A test vége a main() funkciót.

Összegzésként

  • A térkép egy asszociatív tároló, amely az elemeket leképezett formában tárolja.
  • A térkép minden eleméhez tartozik egy kulcsérték és egy leképezett érték.
  • Egy térképen két leképezett érték nem oszthatja meg a kulcsértékeket.
  • A kulcsértékek segítenek az elemek egyedi rendezésében és azonosításában.
  • A leképezett értékek segítenek a kulccsal társított tartalom tárolásában.
  • C++ A térkép az egyedi kulcsokat rendezett sorrendben tárolja.
  • Valakivel együtt dolgozni C++ térképet, létrehozunk egy iterátort, amely az elemek felett iterál.
  • Az iterátorral olyan feladatokat hajthatunk végre, mint például elemek keresése és törlése a térképről.