Harta in C++ Bibliotecă de șabloane standard (STL)

În ce este Harta C++? Sintaxă

In C++, A MAP este un container asociativ care stochează articole într-o formă mapată. Fiecare element din hartă este compus dintr-o cheie-valoare și o valoare mapată. Două valori mapate nu pot împărtăși aceleași valori cheie.

Valorile cheie sunt bune pentru sortarea și identificarea elementelor în mod unic. Valorile mapate sunt pentru stocarea conținutului asociat cheii. Cele două pot diferi în tipuri, dar tipul de membru le combină printr-un tip de pereche care le combină pe ambele.

De ce să folosiți std::map?

Iată motivele pentru a utiliza harta:

  • std:: map stochează cheile unice numai în ordine sortată pe baza criteriilor de sortare alese.
  • Este ușor și mai rapid să cauți elemente folosind cheia.
  • La fiecare cheie este atașat un singur element.
  • std::map poate fi folosit ca o matrice asociativă.
  • std::map este implementabil folosind arbori binari (echilibrat).

Sintaxă

Pentru a declara std::map, utilizați această sintaxă:

std::map<key_datatype, value_datatype>map_name; 
  • key_datatype indică tipul de date al cheilor hărții.
  • value_datatype denotă tipul de date al valorilor corespunzătoare cheilor de hartă.
  • map_name este numele hărții.

De exemplu:

map<string, int> my_map; 

Am declarat o hartă numită my_map. Harta va avea un șir ca cheie tipuri de date și întreg ca Valorile tipul de date.

Tipuri de membri

Funcțiile membru pot folosi următoarele tipuri de membri fie ca parametri, fie ca tip de returnare:

  • tip_cheie: Cheie (primul parametru din șablon)
  • tip_map: T (al doilea parametru din șablon)
  • key_compare: Comparați (al treilea parametru din șablon)
  • allocator_type: Alloc (al patrulea parametru din șablon)
  • tipul valorii: pereche
  • value_compare: Clasă de funcții imbricate pentru compararea elementelor
  • referinţă: allocator_type::reference
  • const_reference: allocator_type::const_reference
  • indicatorul: allocator_type::pointer
  • const_pointer: allocator_type::const_pointer
  • iterator: un iterator bidirecțional la value_type
  • const_iterator: un iterator bidirecțional la const value_type
  • reverse_iterator: un iterator invers
  • const_reverse_iterator: un iterator invers constant
  • tip_diferență: ptrdiff_t
  • tipul marimii: mărime_t

Funcții încorporate ale std::map

std::map vine cu funcții încorporate. Unele dintre acestea includ:

  • ÎNCEPE() - Această funcție returnează iteratorul la primul element al hărții.
  • mărimea() -Această funcție returnează numărul de elemente dintr-o hartă.
  • gol () -Această funcție returnează o valoare booleană care indică dacă o hartă este goală.
  • insert (pereche (cheie, valoare)) – Această funcție inserează o nouă pereche cheie-valoare pe o hartă.
  • găsi (val) - Această funcție dă iteratorul elementului val dacă este găsit. În caz contrar, va returna m.end().
  • Ștergere (poziția iteratorului) – Această funcție șterge elementul din poziția indicată de iterator.
  • șterge (const g) – Această funcție șterge cheia-valoare g de pe o hartă.
  • Clar () -Această funcție șterge toate elementele de pe o hartă.

Iterarea peste elementele hărții

Puteți itera elementele hărții. Trebuie doar să creăm un iterator și să-l folosim pentru asta.
De exemplu:

Exemplu 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;
	}
}

ieșire:

Iterarea peste elementele hărții

Iată o captură de ecran a codului:

Iterarea peste elementele hărții

Explicația codului:

  1. Includeți fișierul antet iostream în codul nostru pentru a utiliza funcțiile acestuia.
  2. Includeți fișierul antet șir în codul nostru pentru a-i folosi funcțiile.
  3. Includeți fișierul antet hărții în codul nostru pentru a-i folosi funcțiile.
  4. Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
  5. Suna main() funcţie. { marchează începutul corpului funcției.
  6. Creați o hartă numită Students, unde cheile vor fi numere întregi, iar valorile vor fi șiruri.
  7. Introduceți valori în hartă Studenți. O cheie de 200 și o valoare de Alice vor fi inserate în hartă.
  8. Introduceți valori în hartă Studenți. O cheie de 201 și o valoare de John vor fi inserate în hartă.
  9. Folosește size() funcția pentru a obține dimensiunea hărții numită Students. Acest lucru ar trebui să returneze un 2.
  10. Tipăriți ceva text pe consolă.
  11. Utilizați o buclă for pentru a crea un iterator numit acesta pentru a repeta peste elementele hărții numite Studenți.
  12. Tipăriți valorile hărții Studenți pe consolă.
  13. Capătul corpului buclei for.
  14. Capătul corpului main() Funcția.

Inserarea datelor în std::map

Puteți introduce articole în std::map folosind insert() funcţie. Rețineți că cheile std::map trebuie să fie unice.

Deci, mai întâi verifică dacă fiecare cheie este prezentă pe hartă. Dacă este prezentă, intrarea nu va fi inserată, dar returnează iteratorul pentru intrarea existentă. Dacă nu este prezentă, intrarea este inserată.

Funcția are următoarele variații:

  • inserare (pereche) - cu această variație, o pereche cheie-valoare este inserată în hartă.
  • insert(start_itr, end_itr) – cu această variație, intrările vor fi inserate în intervalul definit de start_itr și end_itr dintr-o altă hartă.

insert_or_assing() funcția funcționează în același mod ca insert() funcția, dar dacă cheia dată există deja în hartă, valoarea acesteia va fi modificată.

Exemplu 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;
}

ieșire:

Inserarea datelor în std::map

Iată o captură de ecran a codului:

Inserarea datelor în std::map

Explicația codului:

  1. Includeți fișierul antet hărții în codul nostru pentru a-i folosi funcțiile.
  2. Includeți fișierul antet iostream în codul nostru pentru a utiliza funcțiile acestuia.
  3. Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
  4. Suna main() funcţie. { marchează începutul corpului funcției.
  5. Creați o hartă numită m unde cheile vor fi numere întregi, iar valorile vor fi numere întregi. Au fost făcute trei intrări pe hartă.
  6. Inserați o nouă intrare în hartă m. În hartă vor fi introduse o cheie de 5 și o valoare de 6.
  7. Încercarea de a introduce o cheie deja existentă. Deoarece cheia 1 există deja pe hartă, introducerea nu va fi făcută.
  8. Utilizarea insert_or_assign() funcția de inserare sau modificare a unei intrări existente. Deoarece cheia 1 există deja, valoarea sa va fi schimbată la 6.
  9. Tipăriți ceva text pe consolă. Caracterul „\t” creează un spațiu orizontal, în timp ce caracterul „\n” mută cursorul mouse-ului pe linia următoare.
  10. Folosi pentru bucla pentru a crea un iterator numit itr pentru a itera peste elementele hărții numite m.
  11. Tipăriți valorile hărții m pe consolă. Caracterul „\t” creează un spațiu orizontal între fiecare tastă și valoarea ei corespunzătoare. În schimb, caracterul „\n” mută cursorul mouse-ului pe linia următoare după fiecare iterație.
  12. Sfârșitul corpului buclei for.
  13. Programul trebuie să returneze valoare după finalizarea cu succes.
  14. Capătul corpului main() Funcția.

Căutarea pe o hartă

Putem folosi find() funcția de căutare a elementelor dintr-o hartă după tastele lor. Dacă cheia nu este găsită, funcția returnează std::map::end. În caz contrar, va fi returnat un iterator al elementului căutat.

Exemplu 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';
	}
}

ieșire:

Căutarea pe o hartă

Iată o captură de ecran a codului:

Căutarea pe o hartă

Explicația codului:

  1. Includeți fișierul antet iostream în codul nostru pentru a-i folosi funcțiile fără a primi erori.
  2. Includeți fișierul antet șir în codul nostru pentru a-i folosi funcțiile fără a primi erori.
  3. Includeți fișierul antet hărții în codul nostru pentru a-i folosi funcțiile fără a primi erori.
  4. Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
  5. Suna main() funcţie. { marchează începutul corpului de main() Funcția.
  6. Creați o hartă numită Students ale cărei chei vor fi numere întregi și șiruri de valori.
  7. Introduceți valori în hartă Studenți. O cheie de 200 și o valoare de Alice vor fi inserate în hartă.
  8. Introduceți valori în hartă Studenți. O cheie de 201 și o valoare de John vor fi inserate în hartă.
  9. Căutați valoarea asociată cu o cheie de 201.
  10. Utilizați o instrucțiune if pentru a verifica dacă valoarea cheii este găsită.
  11. Tipăriți valoarea cheii alături de un text pe consolă.
  12. Sfârșitul corpului declarației if.
  13. Capătul corpului main() Funcția.

Ștergerea datelor de pe o hartă

Putem folosi erase() funcția de ștergere a unei valori de pe o hartă. Pur și simplu creăm un iterator care indică elementul de șters. Iteratorul este apoi trecut la erase() Funcția.

Exemplu 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;
}

ieșire:

Ștergerea datelor de pe o hartă

Iată o captură de ecran a codului:

Ștergerea datelor de pe o hartă

Explicația codului:

  1. Includeți fișierul antet iostream în codul nostru pentru a utiliza funcțiile acestuia.
  2. Includeți fișierul antet șir în codul nostru pentru a-i folosi funcțiile.
  3. Includeți fișierul antet hărții în codul nostru pentru a-i folosi funcțiile.
  4. Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
  5. Suna main() funcţie. { marchează începutul corpului main() Funcția.
  6. Creați o hartă numită my_map ale cărei chei vor fi șiruri și valori întregi.
  7. Inserați valori în harta my_map. O cheie a lui Cow și o valoare de 1 vor fi inserate în hartă.
  8. Inserați valori în harta my_map. O cheie Cat și o valoare de 2 vor fi inserate în hartă.
  9. Adăugați o valoare 3 în harta my_map cu o cheie a unui leu.
  10. Creați un iterator pentru a itera pe hartă my_map căutând pisica cheie.
  11. Ștergeți elementul indicat de iterator.
  12. Utilizați un iterator pentru a itera elementele hărții my_map de la început până la sfârșit.
  13. Imprimați conținutul hărții my_map pe consolă.
  14. Programul trebuie să returneze rezultate după finalizarea cu succes.
  15. Capătul corpului main() Funcția.

Rezumat

  • O hartă este un container asociativ care stochează articole într-o formă mapată.
  • Fiecare element din hartă are o valoare cheie și o valoare mapată.
  • Într-o hartă, două valori mapate nu pot împărtăși valorile cheie.
  • Valorile cheie ajută la sortarea și identificarea elementelor în mod unic.
  • Valorile mapate ajută la stocarea conținutului asociat cheii.
  • C++ harta stochează cheile unice în ordine sortată.
  • A lucra cu C++ map, creăm un iterator pentru a repeta peste elemente.
  • Cu iteratorul, putem efectua sarcini precum căutarea și ștergerea elementelor de pe hartă.