Karte C ++ standarta veidņu bibliotēkā (STL) ar piemēru

Satura rādītājs:

Anonim

Kas ir std :: map?

Programmā C ++ MAP ir asociatīvs konteiners, kas uzglabā vienumus kartētā formā. Katru kartes elementu veido atslēgas vērtība un kartēta vērtība. Divām kartētajām vērtībām nevar būt vienādas galvenās vērtības.

Galvenās vērtības ir piemērotas, lai kārtotu un identificētu elementus unikāli. Kartētās vērtības ir paredzētas ar atslēgu saistītā satura glabāšanai. Abi veidi var atšķirties pēc tipiem, bet dalībnieka tips tos apvieno, izmantojot pāra tipu, kas apvieno abus.

Šajā C ++ apmācībā jūs uzzināsiet:

  • Kas ir std :: map?
  • Kāpēc izmantot std :: map?
  • Sintakse:
  • Dalībnieku veidi:
  • Iebūvētās funkcijas
  • Atkārtoti kartes elementi
  • Datu ievietošana std :: map:
  • Meklēšana kartē
  • Datu dzēšana no kartes

Kāpēc izmantot std :: map?

Kartes izmantošanas iemesli ir šādi:

  • std :: karte saglabā unikālās atslēgas tikai sakārtotā secībā, pamatojoties uz izvēlētajiem šķirošanas kritērijiem.
  • Elementu meklēšana ir vienkārša un ātrāka, izmantojot atslēgu.
  • Katrai atslēgai ir pievienots tikai viens elements.
  • std :: karti var izmantot kā asociatīvu masīvu.
  • std :: karti var realizēt, izmantojot bināros kokus (līdzsvaroti).

Sintakse:

Lai deklarētu std :: map, izmantojiet šo sintaksi:

std::mapmap_name;
  • Key_datatype apzīmē kartes taustiņu datu tipu.
  • Vērtība_datatips apzīmē vērtību atslēgas datu tipu.
  • Map_name ir kartes nosaukums.

Piemēram:

map my_map;

Mēs pasludinājām karti ar nosaukumu my_map. Kartē atslēgvārdu tipiem būs virkne, bet vērtību skaitlim - vesels skaitlis .

Dalībnieku veidi:

Dalībnieku funkcijas var izmantot šādus dalībnieku tipus kā parametrus vai atgriešanās tipu:

  • key_type: Key (pirmais parametrs veidnē)
  • mapped_type: T (otrais parametrs veidnē)
  • key_compare: Salīdzināt (trešais parametrs veidnē)
  • allokatora_tips: Alloc (ceturtais parametrs veidnē)
  • value_type: pair
  • value_compare: ligzdota funkciju klase elementu salīdzināšanai
  • atsauce: piešķīrēja_tips :: atsauce
  • const_reference: piešķīrēja_tips :: const_reference
  • rādītājs: sadalītāja_tips :: rādītājs
  • const_pointer: piešķīrēja_tips :: const_pointer
  • iterators: divvirzienu iterators ar vērtību_tips
  • const_iterator: divvirzienu iterators uz const value_type
  • reverse_iterator: apgriezts iterators
  • const_reverse_iterator: pastāvīgs reversais iterators
  • atšķirības tips : ptrdiff_t
  • size_type: size_t

Iebūvētās funkcijas

std :: map nāk ar iebūvētām funkcijām. Daži no tiem ietver:

  • sākt () - šī funkcija atgriež iteratoru kartes pirmajā objektā.
  • size () - šī funkcija atgriež vienumu skaitu kartē.
  • tukšs () - šī funkcija atgriež Būla vērtību, kas norāda, vai karte ir tukša.
  • ievietot (pāris (atslēga, vērtība)) - šī funkcija ievieto kartē jaunu atslēgu un vērtību pāri.
  • atrast (val) - šī funkcija piešķir it elementu val elementam, ja tas ir atrasts. Pretējā gadījumā tas atgriezīs m.end ().
  • Dzēst (iteratora pozīcija) - šī funkcija izdzēš iteratora norādīto pozīciju.
  • dzēst (const g) - šī funkcija izdzēš atslēgas vērtību g no kartes.
  • Notīrīt () - šī funkcija izdzēš visus elementus no kartes.

Atkārtoti kartes elementi

Jūs varat atkārtot kartes elementus. Mums vienkārši jāizveido iterators un jāizmanto tas šim nolūkam. Piemēram:

1. piemērs:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  2. Iekļaujiet virknes galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  3. Iekļaujiet kartes galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  4. Iekļaujiet standarta koda telpu mūsu kodā, lai izmantotu tās klases, to neizsaucot.
  5. Izsauciet galveno () funkciju. {Apzīmē funkcijas ķermeņa sākumu.
  6. Izveidojiet karti ar nosaukumu Studenti, kur atslēgas būs veseli skaitļi, un vērtības būs virknes.
  7. Ievietojiet vērtības kartē Studenti. Kartē tiks ievietota 200 atslēga un Alises vērtība.
  8. Ievietojiet vērtības kartē Studenti. Kartē tiks ievietota atslēga 201 un Jāņa vērtība.
  9. Izmantojiet lieluma () funkciju, lai iegūtu kartes nosaukumu Studenti. Tam jāatgriež 2.
  10. Izdrukājiet tekstu konsolē.
  11. Izmantojiet for for ciklu, lai izveidotu iteratoru, kas to nosauca, lai atkārtotu kartes elementus ar nosaukumu Student.
  12. Konsolē izdrukājiet kartes Studentu vērtības.
  13. For cilpas korpusa beigas.
  14. Galvenās () funkcijas ķermeņa beigas.

Datu ievietošana std :: map

Vienumus std :: map var ievadīt, izmantojot funkciju insert (). Atcerieties, ka std :: map taustiņiem jābūt unikāliem.

Tātad vispirms pārbauda, ​​vai kartē ir katrs taustiņš. Ja tas ir, ieraksts netiks ievietots, bet tas atgriež esošā ieraksta iteratoru. Ja tā nav, ieraksts tiek ievietots.

Funkcijai ir šādas variācijas:

  • ievietot (pāri) - ar šo variantu kartē tiek ievietots atslēgu un vērtību pāris.
  • ielikt (start_itr, end_itr) - ar šo variantu ieraksti tiks ievietoti diapazonā, ko nosaka start_itr un end_itr no citas kartes.

Funkcija insert_or_assing () darbojas tāpat kā funkcija insert (), taču, ja dotā atslēga kartē jau pastāv, tās vērtība tiks modificēta.

2. piemērs:

#include #include using namespace std;int main() {map 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;}

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet kartes galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  2. Iekļaujiet iostream galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  3. Iekļaujiet standarta koda telpu mūsu kodā, lai izmantotu tās klases, to neizsaucot.
  4. Izsauciet galveno () funkciju. {Apzīmē funkcijas ķermeņa sākumu.
  5. Izveidojiet karti ar nosaukumu m, kur atslēgas būs veseli skaitļi, un vērtības būs veseli skaitļi. Kartē ir izdarīti trīs ieraksti.
  6. Ievietojiet jaunu ierakstu kartē m. Kartē tiks ievietota atslēga 5 un vērtība 6.
  7. Mēģina ievadīt jau esošu atslēgu. Tā kā 1. atslēga kartē jau pastāv, ieraksts netiks veikts.
  8. Izmantojot ievietošanas vai mainīšanas funkciju (), lai ievietotu vai modificētu esošu ierakstu. Tā kā 1. atslēga jau pastāv, tās vērtība tiks mainīta uz 6.
  9. Izdrukājiet tekstu konsolē. Raksts "\ t" izveido horizontālu atstarpi, bet raksturs "\ n" pārvieto peles kursoru uz nākamo rindu.
  10. Izmantojiet for for ciklu, lai izveidotu iteratoru ar nosaukumu itr, lai atkārtotu kartes elementus ar nosaukumu m.
  11. Uz konsoles izdrukājiet kartes m vērtības. Raksts "\ t" izveido horizontālu atstarpi starp katru taustiņu un tam atbilstošo vērtību. Turpretī rakstzīme "\ n" pēc katras iterācijas pārvieto peles kursoru uz nākamo rindu.
  12. Par cilpu ķermeņa beigas.
  13. Pēc sekmīgas pabeigšanas programmai ir jāatgriež vērtība.
  14. Galvenās () funkcijas ķermeņa beigas.

Meklēšana kartē

Mēs varam izmantot funkciju find (), lai meklētu elementus kartē ar to taustiņiem. Ja atslēga nav atrasta, funkcija atgriež std :: map :: end. Pretējā gadījumā tiks atgriezts meklētā elementa atkārtotājs.

2. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu kodā, lai izmantotu tā funkcijas bez kļūdām.
  2. Iekļaujiet virknes galvenes failu mūsu kodā, lai izmantotu tā funkcijas bez kļūdām.
  3. Iekļaujiet kartes galvenes failu mūsu kodā, lai izmantotu tā funkcijas bez kļūdām.
  4. Iekļaujiet standarta koda telpu mūsu kodā, lai izmantotu tās klases, to neizsaucot.
  5. Izsauciet galveno () funkciju. {Apzīmē sākumu galvenajai () funkcijai.
  6. Izveidojiet karti ar nosaukumu Studenti, kuras atslēgas būs veseli skaitļi un vērtību virknes.
  7. Ievietojiet vērtības kartē Studenti. Kartē tiks ievietota 200 atslēga un Alises vērtība.
  8. Ievietojiet vērtības kartē Studenti. Kartē tiks ievietota atslēga 201 un Jāņa vērtība.
  9. Meklējiet vērtību, kas saistīta ar atslēgu 201.
  10. Izmantojiet if paziņojumu, lai pārbaudītu, vai atslēgas vērtība ir atrasta.
  11. Izdrukājiet atslēgas vērtību blakus tekstam konsolē.
  12. If paziņojuma pamatteksta beigas.
  13. Galvenās () funkcijas ķermeņa beigas.

Datu dzēšana no kartes

Mēs varam izmantot funkciju erase (), lai dzēstu vērtību no kartes. Mēs vienkārši izveidojam iteratoru, kas norāda uz dzēšamo elementu. Pēc tam iterators tiek nodots dzēšanas () funkcijai.

3. piemērs:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  2. Iekļaujiet virknes galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  3. Iekļaujiet kartes galvenes failu mūsu kodā, lai izmantotu tā funkcijas.
  4. Iekļaujiet standarta koda telpu mūsu kodā, lai izmantotu tās klases, to neizsaucot.
  5. Izsauciet galveno () funkciju. {Atzīmē galvenās () funkcijas ķermeņa sākumu.
  6. Izveidojiet karti ar nosaukumu my_map, kuras atslēgas būs virknes un vērtību skaitļi.
  7. Ievietojiet vērtības kartē my_map. Kartē tiks ievietota govs atslēga un vērtība 1.
  8. Ievietojiet vērtības kartē my_map. Kartē tiks ievietota Cat atslēga un vērtība 2.
  9. Pievienojiet kartei my_map 3. vērtību ar lauvas atslēgu.
  10. Izveidojiet iteratoru, lai atkārtotu karti my_map, meklējot galveno kaķi.
  11. Dzēsiet elementu, uz kuru norāda iterators.
  12. Izmantojiet iteratoru, lai atkārtotu kartes my_map elementus no sākuma līdz beigām.
  13. Konsolē izdrukājiet kartes my_map saturu.
  14. Pēc sekmīgas pabeigšanas programmai jāatgriež rezultāts.
  15. Galvenās () funkcijas ķermeņa beigas.

Kopsavilkums:

  • Karte ir asociatīvs konteiners, kurā vienumi tiek glabāti kartētā veidā.
  • Katram kartes objektam ir galvenā vērtība un kartētā vērtība.
  • Kartē divas kartētas vērtības nevar koplietot galvenās vērtības.
  • Galvenās vērtības palīdz unikāli šķirot un identificēt elementus.
  • Kartētās vērtības palīdz ar atslēgu saistītā satura glabāšanā.
  • C ++ kartē unikālās atslēgas tiek sakārtotas secībā.
  • Lai strādātu ar C ++ karti, mēs izveidojam iteratoru, lai atkārtotu elementus.
  • Izmantojot iteratoru, mēs varam veikt tādus uzdevumus kā vienumu meklēšana un dzēšana no kartes.