C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Pointer auf Eintrag einer Map

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Michael Gebhart
Guest





PostPosted: Thu Sep 16, 2004 9:26 pm    Post subject: Pointer auf Eintrag einer Map Reply with quote



Hi zusammen,

ich habe einen Pointer auf eine Map und möchte nun auf einen Eintrag
zugreifen und einen Pointer auf diesen Eintrag erhalten.

myMap ist ein Pointer auf die Map.

Ich hab das nun so gelöst:

&(*myMap)["key"]

Geht das auch einfacher?

Ich hatte an sowas gedacht wie: myMap["Key"] da myMap ja bereits ein Pointer
ist. Das funktioniert jedoch nicht :)

Gruß

Michael

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Vinzenz Feenstra
Guest





PostPosted: Fri Sep 17, 2004 1:10 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote



Michael Gebhart schrieb:
Quote:
Hi zusammen,

ich habe einen Pointer auf eine Map und möchte nun auf einen Eintrag
zugreifen und einen Pointer auf diesen Eintrag erhalten.

myMap ist ein Pointer auf die Map.

Ich hab das nun so gelöst:

&(*myMap)["key"]

Geht das auch einfacher?
Leider nicht.


MfG Vinzenz Feenstra aka eViLiSSiMo

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Kaul
Guest





PostPosted: Fri Sep 17, 2004 8:15 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote



Michael Gebhart wrote:
Quote:
Hi zusammen,

ich habe einen Pointer auf eine Map und möchte nun auf einen Eintrag
zugreifen und einen Pointer auf diesen Eintrag erhalten.

myMap ist ein Pointer auf die Map.

Ich hab das nun so gelöst:

&(*myMap)["key"]

Geht das auch einfacher?

Ich hatte an sowas gedacht wie: myMap["Key"] da myMap ja bereits ein Pointer
ist. Das funktioniert jedoch nicht Smile


Auf jeden Fall musst immer den Pointer derefernzieren und dann via []
den index-operator der Klasse aufrufen.

Wenn dich "&(*myMap)["key"]" richtig stört, dann gibt es nocht die
Möglichkeit, den operator manuell aufzurufen, da er letztendlich auch
wie ne Methode angesprochen werden kann.

myMap->operator[]( "key" );

Ob das viel schöner ist.... ;-)


oder du gehst in zwei Schritten vor (vor allem wenn du öffters
hintereinander auf die Map zugreifen musst)

Map &myMapRef = *myMap;

myMapRef["key"] = ....


tschaule
Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Gieseking
Guest





PostPosted: Fri Sep 17, 2004 8:39 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Quote:
ich habe einen Pointer auf eine Map und möchte nun auf einen Eintrag
zugreifen und einen Pointer auf diesen Eintrag erhalten.

myMap ist ein Pointer auf die Map.

Ich hab das nun so gelöst:

&(*myMap)["key"]

Geht das auch einfacher?

Ich hatte an sowas gedacht wie: myMap["Key"] da myMap ja bereits ein
Pointer ist. Das funktioniert jedoch nicht Smile

Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert
und es nur gelesen werden soll (operator[] erzeugt ja ggf. ein neues map-
Element), kannst Du auch folgenden Ausdruck verwenden:

&myMap->find("key")->second

Ob das nun intuitiver ist, sei mal dahingestellt.
In jedem Fall könntest Du aber eine Referenz auf die map verwenden, also
etwa so:

map<string,ValueType> &mapRef = *myMap;

Einen Elementzeiger bekommt man dann natürlich mit:

&mapRef["key"]

Das lohnt sich aber wohl nur, wenn mehrere Zugriffe in der Art
erforderlich sind. Sonst ist dein oben angegebener Ausdruck der beste
Kompromiss.

Grüße,
Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Michael Gebhart
Guest





PostPosted: Fri Sep 17, 2004 8:53 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Ok alles klar, danke für Eure Antworten.

Gruß

Michael

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Olaf Krzikalla
Guest





PostPosted: Fri Sep 17, 2004 9:51 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Hi,

Martin Gieseking schrieb:
Quote:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert
und es nur gelesen werden soll (operator[] erzeugt ja ggf. ein neues map-
Element), kannst Du auch folgenden Ausdruck verwenden:
Laß Dir die Klammerbemerkung mal in Zusammenhang mit dem von Dir davor

gesagten nochmal auf der Zunge zergehen. Dann wirst Du einen Widerspruch
feststellen, denn der Ausdruck

Quote:
myMap->find("key")->second

ist nie besser als myMap["key"]. Wenn "key" existiert, haben beide
Ausdrücke das gleiche Ergebnis (und vermutlich auch gleiche Laufzeit),
wenn "key" nicht existiert, hat der erste Ausdruck undefiniertes
Verhalten - und das ist natürlich schlechter als jedes definierte
Verhalten.


MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Christoph Rabel
Guest





PostPosted: Fri Sep 17, 2004 11:38 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Olaf Krzikalla wrote:
Quote:

ist nie besser als myMap["key"]. Wenn "key" existiert, haben beide
Ausdrücke das gleiche Ergebnis (und vermutlich auch gleiche Laufzeit),
wenn "key" nicht existiert, hat der erste Ausdruck undefiniertes
Verhalten - und das ist natürlich schlechter als jedes definierte
Verhalten.

Dennoch ziehe ich find, natürlich mit Prüfung auf Existenz, vor. Denn
ich mag meist das Verhalten von map nicht, mir implizit ein neues Objekt
mit diesem Key anzulegen.

mfg

Christoph

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Gieseking
Guest





PostPosted: Fri Sep 17, 2004 11:53 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Olaf Krzikalla <Entwicklung (AT) reico (DOT) de> wrote in
news:414AB3B5.6161FDC (AT) reico (DOT) de:

Quote:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key
existiert und es nur gelesen werden soll (operator[] erzeugt ja ggf.
ein neues map- Element), kannst Du auch folgenden Ausdruck verwenden:
Laß Dir die Klammerbemerkung mal in Zusammenhang mit dem von Dir davor
gesagten nochmal auf der Zunge zergehen. Dann wirst Du einen
Widerspruch feststellen, denn der Ausdruck

myMap->find("key")->second

ist nie besser als myMap["key"]. Wenn "key" existiert, haben beide
Ausdrücke das gleiche Ergebnis (und vermutlich auch gleiche Laufzeit),
wenn "key" nicht existiert, hat der erste Ausdruck undefiniertes
Verhalten - und das ist natürlich schlechter als jedes definierte
Verhalten.

Sorry, aber ich habe nicht geschrieben, dass der Ausdruck "besser" als
ein anderer oder gleichwertig zum []-operator ist. Die Frage war, ob es
eine "elegantere" Schreibweise für eine bestimmte Aufgabe gibt. Kann man
sicherstellen, dass nur existierende Schlüssel verwendet werden, ist der
obige Ausdruck definiert und mit dieser Einschränkung gleichwertig zur
[]-Variante, evtl. sogar etwas schneller.
Die Beurteilung der "Eleganz" ist aber wohl eher eine subjektive und die
Frage nach dem Risiko ggf. undefiniertes Verhalten zu provozieren hängt
vom Kontext ab, in dem der Ausdruck verwendet wird.
So gesehen finde ich keinen Widerspruch in meinem ersten Posting, sondern
habe lediglich eine andere Auffassung bzgl. der Beurteilung
unterschiedlicher Programmierstile.

Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sat Sep 18, 2004 9:02 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Olaf Krzikalla wrote:

Quote:
Hi,

Martin Gieseking schrieb:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert
und es nur gelesen werden soll (operator[] erzeugt ja ggf. ein neues map-
Element), kannst Du auch folgenden Ausdruck verwenden:
Laß Dir die Klammerbemerkung mal in Zusammenhang mit dem von Dir davor
gesagten nochmal auf der Zunge zergehen. Dann wirst Du einen Widerspruch
feststellen,

Wo soll da ein Widerspruch sein?

Quote:
denn der Ausdruck

myMap->find("key")->second

ist nie besser als myMap["key"].

Das Wort "besser" oder irgendetwas äquivalentes kann ich oben nicht finden.

Quote:
Wenn "key" existiert, haben beide Ausdrücke das gleiche Ergebnis (und
vermutlich auch gleiche Laufzeit),

Ja, und genau das war das Ziel. Das gleiche Ergebnis mit einer anderen
Schreibweise zu erreichen.

Quote:
wenn "key" nicht existiert, hat der erste Ausdruck undefiniertes Verhalten
- und das ist natürlich schlechter als jedes definierte Verhalten.

Daher ja oben die Einschränkung: "Wenn Du sicher bist, dass ein Element mit
dem gewünschten key existiert...".

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Olaf Krzikalla
Guest





PostPosted: Mon Sep 20, 2004 10:44 am    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Hi,

nehmt das mal als Antwort auf alle drei Posts.

Rolf Magnus schrieb:
Quote:

Olaf Krzikalla wrote:

Hi,

Martin Gieseking schrieb:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert
und es nur gelesen werden soll (operator[] erzeugt ja ggf. ein neues map-
Element), kannst Du auch folgenden Ausdruck verwenden:
Laß Dir die Klammerbemerkung mal in Zusammenhang mit dem von Dir davor
gesagten nochmal auf der Zunge zergehen. Dann wirst Du einen Widerspruch
feststellen,

Wo soll da ein Widerspruch sein?

Dann zerhacke ich es mal in Aussage:
Quote:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert

und Klammerbemerkung:
Quote:
(operator[] erzeugt ja ggf. ein neues map-Element),

Wann erzeugt operator[] ein neues map-Element? Genau, wenn ein Element
mit dem gewünschten key nicht existiert. Aber genau das wurde ja
vorausgesetzt. Insofern widerspricht die Klammerbemerkung der
vorhergehenden Aussage.

Christoph Rabel schrieb:
Quote:
Dennoch ziehe ich find, natürlich mit Prüfung auf Existenz, vor.
Jaja, _mit_ Prüfung der Existenz. Aber der originale Ausdruck machte

eben genau das nicht.

Martin Gieseking schrieb:
Quote:
Die Frage war, ob es
eine "elegantere" Schreibweise für eine bestimmte Aufgabe gibt.
Über Schreibweisen streite ich nicht. Mir ging es nur um Funktionalität

und in diesem Zusammenhang um den Widerspruch in Deinen einleitenden
Worten.


MfG
Olaf Krzikalla

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Mon Sep 20, 2004 12:58 pm    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Olaf Krzikalla wrote:

Quote:
Hi,

nehmt das mal als Antwort auf alle drei Posts.

Rolf Magnus schrieb:

Olaf Krzikalla wrote:

Hi,

Martin Gieseking schrieb:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key
existiert und es nur gelesen werden soll (operator[] erzeugt ja ggf.
ein neues map- Element), kannst Du auch folgenden Ausdruck verwenden:
Laß Dir die Klammerbemerkung mal in Zusammenhang mit dem von Dir davor
gesagten nochmal auf der Zunge zergehen. Dann wirst Du einen
Widerspruch feststellen,

Wo soll da ein Widerspruch sein?

Dann zerhacke ich es mal in Aussage:
Wenn Du sicher bist, dass ein Element mit dem gewünschten key existiert

und Klammerbemerkung:
(operator[] erzeugt ja ggf. ein neues map-Element),

Wann erzeugt operator[] ein neues map-Element? Genau, wenn ein Element
mit dem gewünschten key nicht existiert. Aber genau das wurde ja
vorausgesetzt. Insofern widerspricht die Klammerbemerkung der
vorhergehenden Aussage.

Nein. Die Klammerbemerkung ist die Begründung für den Rest. Man muß sicher
sein, daß das Element schon existiert, denn sonst wäre das Verhalten von
find anders als das von operator[], da find nicht wie operator[] ein neues
Element erzeugen würde. So habe ich das zumindest verstanden.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Gieseking
Guest





PostPosted: Tue Sep 21, 2004 5:38 pm    Post subject: Re: Pointer auf Eintrag einer Map Reply with quote

Olaf Krzikalla <Entwicklung (AT) reico (DOT) de> wrote:

Quote:
Wann erzeugt operator[] ein neues map-Element? Genau, wenn ein Element
mit dem gewünschten key nicht existiert. Aber genau das wurde ja
vorausgesetzt.

Wo wurde das vorausgesetzt?


Quote:
Christoph Rabel schrieb:
Dennoch ziehe ich find, natürlich mit Prüfung auf Existenz, vor.
Jaja, _mit_ Prüfung der Existenz. Aber der originale Ausdruck machte
eben genau das nicht.

Was mit der mittlerweile mehrfach erwähnten Einschränkung auch nicht nötig
ist. Wie gesagt, ging es mir nicht darum einen äquivalenten Ausdruck
anzugeben (steht ja auch nirgendwo), sondern einen Spezialfall, der ggf.
auf das Ausgangsproblem passt. Die Anmerkung in Klammern ("operator[]
erzeugt ggf. ein neues Element") sollte lediglich den Unterschied zwischen
den beiden Ausdrücken hervorheben, da klar sein sollte, dass die find-
Konstruktion dies gerade nicht macht...


Quote:
Martin Gieseking schrieb:
Die Frage war, ob es
eine "elegantere" Schreibweise für eine bestimmte Aufgabe gibt.
Über Schreibweisen streite ich nicht. Mir ging es nur um
Funktionalität und in diesem Zusammenhang um den Widerspruch in Deinen
einleitenden Worten.


Tut mir leid, aber richtig schlau werde ich aus deiner Anmerkung immer noch
nicht. Genausowenig kann ich einen Widerspruch finden.

Gruß,
Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.