Fråga angående containers i C++

Permalänk

Fråga angående containers i C++

Tjena behöver hjälp med en lite kod vet inte hur jag ska lösa det!!

Jag vill ange en string och en int som sparas i någon container, sedan vill jag bara ange stringen och få int värdet tillbaka.

Ungefär som om man skulle lagra strings i en array och sedan med hjälp av en int indikerare (array[indikerare]) ta fram stringen. Fast i mitt fall blir det tvärtom, jag vill lagra int värden och använda string som indikerare.

Om jag har vart för otydlig(vilket förmodligen är fallet >.<) så säg till så kan jag försöka att förklara bättre.

Tack på förhand om någon lyckas förstå min svabbel.

Permalänk
Medlem

Hashtable / associative array är namnet du söker.

Permalänk
Medlem

Tror du är ute efter en map (som är en associative array). En map är en lista av pair, som i sin tur är en inkapsling av två värden, t.ex. en string och en int. De individuella värdena i ett pair kan nås via de publika variablerna first och second.

// Create std::map <string, int> myMap; // Add element myMap.insert(std::pair<string, int>("example", 666)); // Remove element myMap.erase("example"); // Access element (Kod typ int myInt = myMap.find("example"); fungerar ej; vad skulle isf returneras om sökningen ej ger träff?) int myInt; std::map<string, int>::iterator myIterator = myMap.find("example"); // En iterator kan ses som en pekare/referens. if(myIterator != myMap.end()) { // Om sökningen ej ger träff returneras en iterator som pekar på map::end. myInt = myIterator->second; // Om sökningen ger träff, läs ut andra delen av det pair som iteratorn pekar på. }

För mer info:
http://www.cplusplus.com/reference/map/map/map/
http://www.cprogramming.com/tutorial/stl/stlmap.html

Visa signatur

Laptop: Dell Latitude E7270 | 12,5" FHD IPS | i5-6300U | 16GB RAM | 500GB SSD
Laptop: MacBook Air 13"
NUC: Intel i5-4250U | 8GB RAM | 250GB SSD

Permalänk
Hedersmedlem
Skrivet av PeCe:

Tror du är ute efter en map (som är en associative array). En map är en lista av pair, som i sin tur är en inkapsling av två värden, t.ex. en string och en int. De individuella värdena i ett pair kan nås via de publika variablerna first och second.

// Create std::map <string, int> myMap; // Add element myMap.insert(std::pair<string, int>("example", 666)); // Remove element myMap.erase("example"); // Access element (Kod typ int myInt = myMap.find("example"); fungerar ej; vad skulle isf returneras om sökningen ej ger träff?) int myInt; std::map<string, int>::iterator myIterator = myMap.find("example"); // En iterator kan ses som en pekare/referens. if(myIterator != myMap.end()) { // Om sökningen ej ger träff returneras en iterator som pekar på map::end. myInt = myIterator->second; // Om sökningen ger träff, läs ut andra delen av det pair som iteratorn pekar på. }

För mer info:
http://www.cplusplus.com/reference/map/map/map/
http://www.cprogramming.com/tutorial/stl/stlmap.html

Om man inte vill behöver man dock inte tänka på varken par eller iteratorer. In- och utläsning kan istället göras med

myMap["example"] = 666; if(myMap.count("example")) myInt = myMap["example"];

Iteratorvarianten är sannolikt en smula effektivare, men så länge man inte har väldigt många element är det nog svårt att märka någon skillnad.