Klass och objekt
En klass är en uppsättning variabler och funktioner som fungerar tillsammans, där variablerna inte har värden tilldelade. När värden tilldelas variablerna blir klassen ett objekt. Olika värden som ges till samma klass resulterar i olika objekt; det vill säga olika objekt är samma klass med olika värden. Att skapa ett objekt från en klass sägs att det skapar ett objekt.
Namnet, unordered_map, är en klass. Ett objekt som skapats från unordered_map-klassen har ett programmerat valt namn.
En funktion som tillhör en klass behövs för att instantiera ett objekt från klassen. I C ++ har den funktionen samma namn som namnet på klassen. Objekt som skapats (instantierats) från klassen har olika namn som de har fått av programmeraren.
Att skapa ett objekt från klassen betyder att konstruera objektet; det betyder också omedelbar inställning.
Ett C ++ - program som använder klassen unordered_map börjar med följande rader högst upp i filen:
#omfatta#omfatta
använder namnrymd std;
Den första raden är för in / ut. Den andra raden är att låta programmet använda alla funktioner i klassen unordered_map. Den tredje raden tillåter programmet att använda namnen i standardnamnområdet.
Överbelastning av en funktion
När två eller flera olika funktionssignaturer har samma namn, sägs det namnet vara överbelastat. När en funktion anropas bestämmer antalet och typen av argument vilken funktion som faktiskt körs.
Konstruktion / kopieringskonstruktion
Enkel konstruktion
En oordnad karta kan konstrueras och tilldelas värden enligt följande:
unordered_mapumap ["banan"] = "gul";
umap ["druva"] = "grön";
umap ["fig"] = "lila";
Deklarationen börjar med mallspecialiseringen med typerna för nyckel- och värdeparen. Detta följs av programmerarens valda namn för kartan; sedan ett semikolon. Det andra kodsegmentet visar hur man tilldelar värden till sina nycklar.
Konstruktion av Initializer_list
Detta kan göras enligt följande:
"druva", "grön", "fig", "lila");
Konstruktion genom att tilldela Initializer_list
Exempel:
"druva", "grön", "fig", "lila";
Konstruktion genom att kopiera en annan unordered_map
Exempel:
"druva", "grön", "fig", "lila");
unordered_map
Paret Element
Följande kod visar hur du skapar och får åtkomst till parelementet:
parcout << pr.first << '\n';
cout << pr.second << '\n';
Utgången är:
dhav
första och andra är reserverade ord för de två objekten i paret. Värdena i paret kan ändras med hjälp av första och andra.
Ett par kallas, value_type i ämnet för den oordnade kartan.
unordered_map Element Access
mapped_type & operator [] (key_type && k)
Returnerar värdet för motsvarande tangent. Exempel:
umap ["banan"] = "gul";
umap ["druva"] = "grön";
umap ["fig"] = "lila";
const char * ret = umap ["druva"];
cout << ret <<'\n';
Utgången är: “grön”. Värden kan tilldelas på samma sätt - se ovan.
unordered_map Kapacitet
size_type storlek () const noexcept
Returnerar antalet par på kartan.
umap ["banan"] = "gul";
umap ["druva"] = "grön";
umap ["fig"] = "lila";
cout << umap.size() <<'\n';
Output är 3.
bool tom () const noexcept
Returnerar 1 för true om kartan inte har något par och 0 för false om den har par. Exempel:
unordered_mapcout << umap.empty() <<'\n';
Output är 1.
Återkommande Iteratorer och den oordnade kartklassen
En iterator är som en pekare men har mer funktionalitet än pekaren.
starta () noexcept
Returnerar en iterator som pekar på det första paret i kartobjektet, som i följande kodsegment:
unordered_mapumap ["banan"] = "gul"; umap ["druva"] = "grön"; umap ["fig"] = "lila";
unordered_map
par
cout << pr.first << ", " << pr.second << '\n';
Utgången är: fig, lila. Kartan är obeställd.
begin () const noexcept;
Returnerar en iterator som pekar på det första elementet i kartobjektsamlingen. När objektkonstruktionen föregås av const utförs uttrycket "start () const" istället för "start ()". Under detta villkor kan elementen i objektet inte ändras. Den används till exempel i följande kod.
const unordered_map"druva", "grön", "fig", "lila");
unordered_map
par
cout << pr.first << ", " << pr.second << '\n';
Utgången är: fig, lila. Kartan är obeställd. Observera att const_iterator har använts den här gången, istället för bara iterator, för att ta emot den returnerade iteratorn.
slut () noexcept
Returnerar en iterator som pekar direkt bortom det sista elementet i kartobjektet.
end () const noexcept
Returnerar en iterator som pekar omedelbart bortom det sista elementet i kartobjektet. När kartobjektkonstruktionen föregås av const körs uttrycket "end () const" istället för "end ()".
unordered_map-operationer
iteratorsökning (const key_type & k)
Söker efter ett par av den angivna nyckeln på kartan. Om den hittas returnerar den iteratorn. Om den inte hittas returnerar den en iterator som pekar på slutet av kartan, som inte är ett par. Följande kod visar hur du använder den här medlemsfunktionen:
unordered_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
if (umap.hitta ('c') != umap.slutet())
par
cout << pr.first << ", " << pr.second << '\n';
Utgången är: c, d
const_iterator hitta (const key_type & k) const;
Denna version av funktionen kallas, om skapandet av den oordnade kartan börjar med const, vilket gör att alla element på kartan är skrivskyddade.
unordered_map Modifiers
par
En oordnad karta betyder att paren inte är i någon ordning. Så, programmet sätter in paret på vilken plats som helst som det passar. Funktionen återgår, parar ihop
umap ["banan"] = "gul";
umap ["druva"] = "grön";
umap ["fig"] = "lila";
umap.infoga ("körsbär", "röd", "jordgubbe", "röd");
cout << umap.size() << '\n';
Utgången är: 5. Mer än ett par kan sättas in.
size_type radera (const key_type & k)
Denna funktion raderar ett par från unordered_map. Följande kodsegment illustrerar:
unordered_mapumap ["banan"] = "gul";
umap ["druva"] = "grön";
umap ["fig"] = "lila";
int num = umap.radera ("druva");
cout << umap.size() << '\n';
Utgången är 2.
ogiltig swap (unordered_map &)
Två oordnade kartor kan bytas ut, som illustreras i detta kodsegment:
"druva", "grön", "fig", "lila", "jordgubbe", "röd";
unordered_map
umap1.byta (umap2);
unordered_map
par
unordered_map
par
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map
"druva", "grön", "fig", "lila", "jordgubbe", "röd";
unordered_map
umap1.swap (umap2);
unordered_map
par
unordered_map
par
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Utgången är:
Första nyckeln och storleken på umap1: lime, 2
Första nyckeln och storleken på umap2 jordgubbe, 4
Kartan är obeställd. Observera att kartans längd ökas vid behov. Datatyperna måste vara desamma.
Klass och dess omedelbara objekt
Ett värde är till en datatyp, som ett instanserat objekt till en klass. Den oordnade kartkonstruktionen kan också acceptera en klass som datatyp. Följande program illustrerar detta:
#omfatta#omfatta
använder namnrymd std;
klass TheCla
offentlig:
int num;
statisk char ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statisk tomrumskul (char ch)
om (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map
umap = "banana", obj1, "grape", obj2, "fig", obj3, "strawberry", obj4, "lime", obj5;
cout << umap.size() << '\n';
returnera 0;
Utgången är: 5.
Klassdefinitionen har två datapublicerade medlemmar och två offentliga medlemsfunktioner. I huvudfunktionen () instilleras olika objekt för klassen. En oordnad karta instanseras sedan, där varje par består av namnet på en frukt och ett objekt från klassen. Kartans storlek visas. Programmet kompilerar utan varning eller felmeddelande.
Tillämpning av kartan
Matrisen associerar ett index till värdet. Nyckel / värdepar finns i många situationer i livet, som kan programmeras. Nyckel / värde-par frukt / färg är bara ett exempel. Ett annat exempel är namnet på människor och deras åldrar. I det här fallet kommer paret att vara av en typ, par
Bildandet av en karta
En karta är inte en tvådimensionell matris med två kolumner. En karta fungerar med en hash-funktion. Nyckeln kodas av hashfunktionen till ett heltal i en matris. Det är denna matris som innehåller värdena. Så det finns faktiskt en matris med värdena och tangenterna mappas till matrisens index, och så görs korrespondensen mellan nycklar och värden. Hashing är ett omfattande ämne och omfattas inte av den här artikeln.
Slutsats
En karta, även känd som en associerande matris, är en lista med element där varje element är ett nyckel / värdepar. Så varje tangent motsvarar ett värde. I C ++ implementeras kartan som en datastruktur med medlemsfunktioner och operatörer. En ordnad karta är en där elementparen har ordnats med nycklar. En oordnad karta är en där det inte finns någon beställning.
Tekniskt sett består en hash av par
Initieringslistan för kartan är en bokstavlig bokstav av bokstäver. Varje intern bokstav består av två objekt, nyckel / värde-paret.
Medlemsfunktionerna och operatörerna för unordered_map kan kategoriseras under följande rubriker: unordered_map-konstruktion / kopieringskonstruktion, unordered_map Capacity, unordered_map iterator, unordered_map Operations och unordered_map Modifiers.
En oordnad karta används när en nyckel måste mappas till ett värde.
Chrys