Problem mit std::map
-
Hallo,
ich habe eine std::map<int, std::multimap<char, string> > mymap
und möchte jetzt den key der map (int) erhalten aber mymap->second soll jetzt nen Nullpointer liefern, wie mach ich dass denn?mymap[ 4] = 0;
..funktioniert leider nicht.
Mfg
-
Eine multimap ist nunmal kein Zeiger und kann somit keinen Nullpointer aufnehmen. Mach halt einen Zeiger, wenn es unbedingt sein muss (was ich einmal bezweifle..).
-
...wie kann ich es denn sonst machen, wenn ich auf jeden Fall den Schlüssel erhalten will?
Mfg
-
Mach halt einen Zeiger, wenn es unbedingt sein muss (was ich einmal bezweifle..).
... und wie?
Ich erhalte immer einen Speicherzugriffsfehler
-
cppcoder382 schrieb:
Ich erhalte immer einen Speicherzugriffsfehler
Dann machst du es falsch. Du forderst dann wahrscheinlich nichteinmal Speicher an..
(Schon einmal etwas von new gehört?)
-
... wie würde sowas denn aussehen?
mir ist nicht klar was du meinst!
-
Das gehört zu den Grundlagen:
http://tutorial.schornboeck.net/inhalt.htmOder kauf dir besser ein gutes Buch.
-
Hi!
Du übergibst als value ein Objekt und kein Zeiger:
std::map<int, std::multimap<char, string> > mymap;Wenn du einen Zeiger auf eine multimap übergeben willst, musst du das so machen:
map<int, multimap<char, string>* > myMap; // erstellt eine map, die einen Zeiger auf eine multimap erwartet. multimap<char, string>* myMultimap = new multimap<char,string>(); // So erstellst du einen Zeiger auf einen Multimap. myMap.insert(map<int, multimap<char, string>*>::value_type(1, myMultimap)); // fügt den Zeiger auf eine multimap in die map ein. Der key ist in dem Fall "1".Schau dir wirklich noch mal besser die Grundlagen an (Zeiger).
Viele Grüße!
-
cppcoder382 schrieb:
...wie kann ich es denn sonst machen, wenn ich auf jeden Fall den Schlüssel erhalten will?
Mfg
In welchem Fall willst du denn den Key der Map erhalten, und für welches Element?
Du kannst ja z.B. einfach die multimap leer lassen, für Keys die "keinen Wert haben".Oder du kannst boost::optional<> verwenden, also
std::map<int, boost::optional<std::multimap<char, string> > >.
-
Das wäre auch ein Fall für Smart Pointer. Oder eventuell sogar
boost::ptr_map(mitis_nullable) - bei beiden muss man sich nicht um die Speicherfreigabe kümmern.
-
... ich habe es jetzt mit clear() realisiert, klappt wunderbar
-
cppcoder382 schrieb:
... ich habe es jetzt mit clear() realisiert, klappt wunderbar
Ja, und du hast ein wunderbares Speicherleck.
Speicherbereich, den du mit
newangefordert hast, musst du wieder mitdeletelöschen - es sei denn, du verwendest Smart-Pointer oder Pointer-Container.