Programmier-Probleme HW Seminar: C++ STL hash_map-

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Programmier-Probleme HW Seminar: C++ STL hash_map-
Hallöchen,
leider stolpere ich immer wieder über Fallen in C bzw. C++, ich darf ja leider keine Skriptsprache verwenden…
aktuell: ich benötige eine hashmap. key: string, value: int!
idee: existiert zum entsprechenden key schon ein wert über 0, möchte ich diesen verwenden. ansonsten möchte einen neuen wert (aus “laufvariabel”) nehmen, und es eben neu anlegen…
wie kann ich jetzt auf existenz eines key-val paares prüfen?!
gruss,
clebinger


std::hash_map<std::string, int>::const_iterator it = myMap.find("myKey");
if (it == myMap.end())
    std::cerr << "Key was not found in the map" << std::endl;
else 
    std::cout << "Value is " << it->second << std::endl;

Aber Vorsicht, [m]std::hash_map[/m] ist nicht offizieller Bestandteil der STL und existiert deswegen nicht in allen Implementierungen. Falls dir eine Komplexität von O(log n) ausreicht, kannst du stattdessen eine [m]std::map[/m] verwenden.


cool, danke. auch für den hinweis.
wie initialisiere ich eine map…=?!
kennst du ein gutes c++ buch was auf die STL eingeht mit kochrezepten?!


std::map<std::string, int> myMap;
myMap["apple"]   =  4;
myMap["banana"]  =  8;
myMap["cherry"]  = 15;
myMap["orange"]  = 16;
myMap["coconut"] = 23;
myMap["mango"]   = 42;

gut bei mir gibt es heute obstsalat…
danke. du hast mir sehr geholfen…:slight_smile:

ps. hoffentlich lässt du meine “noob”-fragen nicht in die sp-aufgaben-bewertung einfließen…


Aber sicher doch, pro Frage ziehe ich pauschal 2 Punkte ab. :-p


zu C++ Büchern: Stroustrup hat mir getaugt, ansonsten halt i-net.
Gute stl-referenzen sind: www.cppreference.com und www.cplusplus.com


Zur Hashmap: In C++0x ist die endlich Standard, davor gibt es auch schon std::tr1::unordered_map und std::tr1::unordered_set. Prima mit GCC, unter Windows erst unterstützt ab VS 2008.

Eine andere Möglichkeit ist, die prinzipiell schon abgelehnte alte hash_map zu verwenden. Visual Studio hat stdext::hash_map in <hash_map>, GCC hat __gnu_cxx::hash_map ebenso in <hash_map>. Um sich das Leben leichter zu machen gibt es den folgenden Trick:

#include <hash_map>
namespace std {
#ifdef GNUC
  using namespace __gnu_cxx;
#elif
  using namespace stdext;
#endif
}

Sind das die Zahlen aus LOST? :smiley:


ja sind sie :wink: