Kaart sisse C++ Standardmalliteek (STL)

Milles on kaart C++? Süntaks

In C++on MAP on assotsiatiivne konteiner, mis salvestab üksusi kaardistatud kujul. Iga üksus kaardil koosneb võtmeväärtusest ja vastendatud väärtusest. Kaks vastendatud väärtust ei saa jagada samu võtmeväärtusi.

Võtmeväärtused sobivad elementide kordumatuks sortimiseks ja tuvastamiseks. Vastandatud väärtused on mõeldud võtmega seotud sisu salvestamiseks. Need kaks võivad tüüpide poolest erineda, kuid liikmetüüp ühendab need paaritüübi kaudu, mis ühendab mõlemad.

Miks kasutada std::map?

Siin on kaardi kasutamise põhjused:

  • std:: kaart salvestab unikaalsed võtmed ainult sorteeritud järjekorras valitud sortimiskriteeriumide alusel.
  • Võtme abil on elemente lihtne ja kiirem otsida.
  • Igale võtmele on kinnitatud ainult üks element.
  • std::map saab kasutada assotsiatiivse massiivina.
  • std::map on rakendatav kahendpuude abil (tasakaalustatud).

Süntaks

Std::map deklareerimiseks kasutage järgmist süntaksit:

std::map<key_datatype, value_datatype>map_name; 
  • . key_datatype tähistab kaardivõtmete andmetüüpi.
  • . value_datatype tähistab kaardivõtmetele vastavate väärtuste andmetüüpi.
  • . map_name on kaardi nimi.

Näiteks:

map<string, int> my_map; 

Me kuulutasime kaardi nimega my_map. Kaardil on string as võti andmetüübid ja täisarv as väärtused andmetüüp.

Liikmete tüübid

Liikmefunktsioonid võivad parameetrite või tagastustüübina kasutada järgmisi liikmetüüpe:

  • key_type: Võti (malli esimene parameeter)
  • mapped_type: T (teine ​​parameeter mallis)
  • key_compare: Võrdle (malli kolmas parameeter)
  • allokaatori_tüüp: Alloc (malli neljas parameeter)
  • väärtuse_tüüp: paar
  • value_compare: Pesastatud funktsiooniklass elementide võrdlemiseks
  • viide: allocator_type::reference
  • const_reference: allocator_type::const_reference
  • pointer: allocator_type::pointer
  • const_pointer: allocator_type::const_pointer
  • iteraator: väärtuse_tüüpi kahesuunaline iteraator
  • const_iterator: kahesuunaline iteraator väärtusele const value_type
  • reverse_iterator: vastupidine iteraator
  • const_reverse_iterator: pidev tagurpidi iteraator
  • erinevus_tüüp: ptrdiff_t
  • size_type: suurus_t

Std::map sisseehitatud funktsioonid

std::kaardil on sisseehitatud funktsioonid. Mõned neist hõlmavad järgmist:

  • alusta () – See funktsioon tagastab iteraatori kaardi esimesele elemendile.
  • suurus () -See funktsioon tagastab kaardil olevate üksuste arvu.
  • tühi () –See funktsioon tagastab Boole'i ​​väärtuse, mis näitab, kas kaart on tühi.
  • sisesta (paar(võti, väärtus)) – See funktsioon lisab kaardile uue võtme-väärtuse paari.
  • leia(val) – See funktsioon annab iteraatori val elemendile, kui see leitakse. Vastasel juhul tagastab see m.end().
  • Kustuta (iteraatori asukoht) – See funktsioon kustutab elemendi iteraatori näidatud kohas.
  • kustuta (konst g) – See funktsioon kustutab kaardilt võtmeväärtuse g.
  • Selge () –See funktsioon kustutab kõik üksused kaardilt.

Itereerimine üle kaardielementide

Saate korrata kaardielemente. Peame lihtsalt looma iteraatori ja seda selleks kasutama.
Näiteks:

Näide 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;
	}
}

Väljund:

Itereerimine üle kaardielementide

Siin on koodi ekraanipilt:

Itereerimine üle kaardielementide

Koodi selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  2. Selle funktsioonide kasutamiseks lisage meie koodi stringi päise fail.
  3. Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
  4. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage main() funktsiooni. { tähistab funktsiooni keha algust.
  6. Looge kaart nimega Õpilased, kus võtmeteks on täisarvud ja väärtusteks stringid.
  7. Sisestage väärtused kaardile Õpilased. Võti 200 ja Alice'i väärtus sisestatakse kaardile.
  8. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
  9. Kasuta size() funktsioon, et saada kaardi nimega Õpilased suurust. See peaks tagastama 2.
  10. Printige konsoolile teksti.
  11. Kasutage for-silmust, et luua iteraator nimega see, et itereerida üle kaardi elemente nimega Õpilased.
  12. Printige konsoolile kaardi Õpilased väärtused.
  13. For-silmuse keha lõpp.
  14. Keha lõpp main() funktsiooni.

Andmete sisestamine kausta std::map

Saate sisestada üksusi std::kaarti kasutades insert() funktsiooni. Pidage meeles, et std::map võtmed peavad olema kordumatud.

Seega kontrollib see esmalt, kas iga võti on kaardil olemas. Kui see on olemas, siis kirjet ei lisata, kuid see tagastab olemasoleva kirje iteraatori. Kui seda pole, sisestatakse kirje.

Funktsioonil on järgmised variatsioonid:

  • lisa (paar) – selle variatsiooniga lisatakse kaardile võtme-väärtuse paar.
  • insert(algus_itr, end_itr) – selle variatsiooniga sisestatakse kirjed vahemikku, mis on määratud parameetritega start_itr ja end_itr teiselt kaardilt.

. insert_or_assing() funktsioon töötab samamoodi nagu insert() funktsiooni, kuid kui antud võti on kaardil juba olemas, siis selle väärtust muudetakse.

Näide 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;
}

Väljund:

Andmete sisestamine kausta std::map

Siin on koodi ekraanipilt:

Andmete sisestamine kausta std::map

Koodi selgitus:

  1. Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
  2. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  3. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  4. Helistage main() funktsiooni. { tähistab funktsiooni keha algust.
  5. Looge kaart nimega m, kus võtmeteks on täisarvud ja väärtusteks täisarvud. Kaardile on tehtud kolm sissekannet.
  6. Lisa kaardile uus kirje m. Kaardile lisatakse võti 5 ja väärtus 6.
  7. Püüab sisestada juba olemasolevasse võtmesse. Kuna võti 1 on kaardil juba olemas, siis sisestust ei tehta.
  8. kasutades insert_or_assign() funktsioon olemasoleva kirje sisestamiseks või muutmiseks. Kuna võti 1 on juba olemas, muudetakse selle väärtuseks 6.
  9. Printige konsoolile teksti. Märk „\t” loob horisontaalse tühiku, samas kui märk „\n” viib hiirekursori järgmisele reale.
  10. Kasutama silmuse jaoks iteraatori loomiseks nimega itr, et itereerida üle kaardi elementide nimega m.
  11. Printige konsoolile kaardi m väärtused. Märk “\t” loob horisontaalse tühiku iga klahvi ja sellele vastava väärtuse vahele. Seevastu märk „\n” viib hiirekursori pärast iga iteratsiooni järgmisele reale.
  12. For silmuse keha lõpp.
  13. Programm peab pärast edukat lõpetamist tagastama väärtuse.
  14. Keha lõpp main() funktsiooni.

Otsing kaardil

Me saame kasutada find() funktsioon kaardil elementide otsimiseks nende klahvide järgi. Kui võtit ei leita, tagastab funktsioon std::map::end. Vastasel juhul tagastatakse otsitud elemendi iteraator.

Näide 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';
	}
}

Väljund:

Otsing kaardil

Siin on koodi ekraanipilt:

Otsing kaardil

Koodi selgitus:

  1. Kaasake iostreami päisefail meie koodi, et kasutada selle funktsioone ilma vigadeta.
  2. Kaasake stringi päise fail meie koodi, et kasutada selle funktsioone ilma vigadeta.
  3. Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone ilma vigadeta.
  4. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage main() funktsiooni. { märgib keha algust main() funktsiooni.
  6. Looge kaart nimega Õpilased, mille võtmeteks on täisarvud ja väärtuste stringid.
  7. Sisestage väärtused kaardile Õpilased. Võti 200 ja Alice'i väärtus sisestatakse kaardile.
  8. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
  9. Otsige võtmega 201 seotud väärtust.
  10. Kasutage if-lauset, et kontrollida, kas võtme väärtus on leitud.
  11. Printige võtme väärtus konsoolil mõne teksti kõrvale.
  12. Kui-lause põhiosa lõpp.
  13. Keha lõpp main() funktsiooni.

Andmete kustutamine kaardilt

Me saame kasutada erase() funktsioon väärtuse kaardilt kustutamiseks. Loome lihtsalt iteraatori, mis osutab kustutatavale elemendile. Seejärel suunatakse iteraator erase() funktsiooni.

Näide 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;
}

Väljund:

Andmete kustutamine kaardilt

Siin on koodi ekraanipilt:

Andmete kustutamine kaardilt

Koodi selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  2. Selle funktsioonide kasutamiseks lisage meie koodi stringi päise fail.
  3. Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
  4. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage main() funktsiooni. { märgib keha algust main() funktsiooni.
  6. Looge kaart nimega minu_kaart, mille võtmeteks on stringid ja väärtusteks täisarvud.
  7. Sisesta väärtused kaardile my_map. Kaardile lisatakse lehma võti ja väärtus 1.
  8. Sisesta väärtused kaardile my_map. Kassi võti ja väärtus 2 lisatakse kaardile.
  9. Lisage väärtus 3 kaardile my_map lõvi võtmega.
  10. Looge iteraator, et itereerida kaardil my_map võtmekassi otsimiseks.
  11. Kustutage element, millele iteraator osutas.
  12. Kasutage iteraatorit, et itereerida kaardi my_map elemendid algusest lõpuni.
  13. Printige konsoolil välja kaardi my_map sisu.
  14. Programm peab pärast edukat lõpetamist tagastama väljundi.
  15. Keha lõpp main() funktsiooni.

kokkuvõte

  • Kaart on assotsiatiivne konteiner, mis salvestab üksused kaardistatud kujul.
  • Igal kaardil oleval üksusel on võtmeväärtus ja kaardistatud väärtus.
  • Kaardil ei saa kaks vastendatud väärtust põhiväärtusi jagada.
  • Põhiväärtused aitavad elemente kordumatult sortida ja tuvastada.
  • Kaardistatud väärtused aitavad salvestada võtmega seotud sisu.
  • C++ kaart salvestab unikaalsed võtmed sorteeritud järjekorras.
  • Et töötada C++ kaardil, loome iteraatori elementide kordamiseks.
  • Iteraatoriga saame täita selliseid toiminguid nagu kaardil olevate üksuste otsimine ja kustutamine.