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
Fråga angående containers i C++
Visa signatur
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.
Hashtable / associative array är namnet du söker.
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
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
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.
Copyright © 1999–2024 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.