<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Map Key == Klassenmember des Objekt??]]></title><description><![CDATA[<p>ich hätte gern ne map, welche objekte der klasse foo enthält, dabei soll der key des objekt in der map eine member von foo sein. Beispiel:</p>
<pre><code class="language-cpp">class foo{

 int ID;
public:
 const int &amp;GetID()const { return ID;}
};

std::map&lt;/*&lt;-- ID von FOO --&gt;*/,foo&gt; data;
</code></pre>
<p>d.h. wenn ich</p>
<pre><code class="language-cpp">foo *p= &amp;data[6];
</code></pre>
<p>will ich das foo mit der ID 6</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218110/map-key-klassenmember-des-objekt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 01:00:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218110.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Jul 2008 07:18:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:18:06 GMT]]></title><description><![CDATA[<p>ich hätte gern ne map, welche objekte der klasse foo enthält, dabei soll der key des objekt in der map eine member von foo sein. Beispiel:</p>
<pre><code class="language-cpp">class foo{

 int ID;
public:
 const int &amp;GetID()const { return ID;}
};

std::map&lt;/*&lt;-- ID von FOO --&gt;*/,foo&gt; data;
</code></pre>
<p>d.h. wenn ich</p>
<pre><code class="language-cpp">foo *p= &amp;data[6];
</code></pre>
<p>will ich das foo mit der ID 6</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548032</guid><dc:creator><![CDATA[Noobiessss]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:27:27 GMT]]></title><description><![CDATA[<p>Warum muss es unbedingt die ID aus der Klasse sein? Reicht nicht ein Normale int als Schlüssel??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548037</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:41:19 GMT]]></title><description><![CDATA[<p>Du brauchst doch bloß ein Sortierkriterium zu bauen, welches deine foo Objekte<br />
anhand der ID sortiert.</p>
<pre><code class="language-cpp">struct CompareByID {
   bool operator()(int lhs, int rhs) const { return lhs &lt; rhs; }
};

typedef std::map&lt;int, foo, CompareByID&gt; FooMap;
FooMap fooMap;
foo f(33);
fooMap.insert(std:make_pair(f.gGetID(), f));
foo&amp; theF = fooMap[33];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1548042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548042</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:47:06 GMT]]></title><description><![CDATA[<p>Würde es so aussehen:</p>
<pre><code class="language-cpp">class foo{

 int ID;
public:
 const int &amp;GetID()const { return ID;}
 void func(){
 }
};

std::map&lt;int,foo&gt; data;
</code></pre>
<p>und ich ich würde das machen</p>
<pre><code class="language-cpp">data[5].func(); //Hier sollte nun die funktion des Objekt foo mit der ID 5 aufgerufen werden.
</code></pre>
<p>das ist meine intension</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548048</guid><dc:creator><![CDATA[Noobiessss]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:51:14 GMT]]></title><description><![CDATA[<p>Du mußt natürlich was in die map reintun, damit du auch was rausholen kannst.<br />
Oder möchtest du, das</p>
<pre><code class="language-cpp">mymap[5]
</code></pre>
<p>automatisch das foo Objekt mit der ID 5 erzeugt?<br />
Mir ist noch nicht ganz klar wo du hin willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548051</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 07:56:50 GMT]]></title><description><![CDATA[<p>ja genau</p>
<p>//das erste mal<br />
//Es wird ein foo objekt er zeugt, das foo objekt enthält eine list der ein eleme hinzugefügt wird<br />
mymap[5].func(elem1);</p>
<p>//Das zweite mal<br />
//Es wird dem vorhanden foo objekt mit der ID 5 ein elem in der liste angefügt.<br />
mymap[5].func(elem2);</p>
<p>das ist meien vorhaben...</p>
<p>P.S. :Ich könnte natürlich einen vector anlegen mit X foo objekten ,und über den indnex drauf zugreifen... aber wenn nich nur einige index benötige und nicht alle also vll. nur 4 von 100 muss ich ja nich jedes mal 100 objekte anlegen. Wäre natürlich die zweite alternative wenn das mit der map nich klappt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548056</guid><dc:creator><![CDATA[Noobiessss]]></dc:creator><pubDate>Wed, 16 Jul 2008 07:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 08:07:22 GMT]]></title><description><![CDATA[<p>Das geht wohl so mit der std::map nicht (direkt).<br />
Mit der std::map wird bei foomap[5] ein Default-Konstruiertes foo-Objekt in die map mit dem Key 5 eingefügt. Das heißt aber nicht, daß das foo-Objekt mit 5 initialisert wird.<br />
Für sowas müßtest du wohl die std::map in eine eigene Klass tun, die im opertator[] prüft, ob das entsprechende Objekt existiert oder nicht, ggf. eins anlegt und das zurückliefert.</p>
<p>Ungefähr so:</p>
<pre><code>// ungetestest als Pseudo-Code zu verstehen!

foo&amp; mymap::operator[](int key) 
{
    std::map&lt;int,foo&gt;::iterator it = thefoomap.find(key);
    if(it == thefoomap.end())  // foo-Object nicht da
    {
        thefoomap.insert(std::make_pair(int, foo(int));
    }
    return thefoomap[key];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1548062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548062</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 08:13:38 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Für sowas müßtest du wohl die std::map in eine eigene Klass tun, die im opertator[] prüft, ob das entsprechende Objekt existiert oder nicht, ggf. eins anlegt und das zurückliefert.</p>
</blockquote>
<p>Das wird sehr umständlich werden, wenn der OP nicht alle Funktionen der map durchschleift. Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
<p>Ist es wirklich so schlimm bei Sonderfällen auf eine separate Funktion umzusteigen? Sprich statt den Operator [] eine Funktion zu verwenden?</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548064</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 08:40:21 GMT]]></title><description><![CDATA[<p>[quote=&quot;asc&quot;]</p>
<p>bladerunner10 schrieb:</p>
<blockquote>
<p>...<br />
Das wird sehr umständlich werden, wenn der OP nicht alle Funktionen der map durchschleift. Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
<p>Warum nicht ?</p>
<p>asc schrieb:</p>
<blockquote>
<p>Ist es wirklich so schlimm bei Sonderfällen auf eine separate Funktion umzusteigen? Sprich statt den Operator [] eine Funktion zu verwenden?<br />
cu André</p>
</blockquote>
<p>Kommt natürlich auf den konkreten Anwendungsfall an, würde ich aber wahrscheinlich auch eher so machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548083</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 08:54:42 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>...<br />
Das wird sehr umständlich werden, wenn der OP nicht alle Funktionen der map durchschleift. Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
<p>Warum nicht ?</p>
</blockquote>
<p>Die Standardcontainer haben z.B. keinen virtuellen Destruktor was sie in der Regel für eine Ableitung disqualifiziert.</p>
<p>bladerunner10 schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Ist es wirklich so schlimm bei Sonderfällen auf eine separate Funktion umzusteigen? Sprich statt den Operator [] eine Funktion zu verwenden?<br />
cu André</p>
</blockquote>
<p>Kommt natürlich auf den konkreten Anwendungsfall an, würde ich aber wahrscheinlich auch eher so machen.</p>
</blockquote>
<p>Es kommt eben nicht nur auf den Anwendungsfall, sondern auch auf die vorliegenden Rahmenbedingungen an. Wenn eine Klasse keine Ableitung vorsieht, sollte man auch tunlichst vermeiden davon abzuleiten. Und einen Proxy für eine std::map zu schreiben ist zwar möglich, nicht desto trotz aber umständlicher als auf eine Funktion auszuweichen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548093</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:54:42 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 08:59:59 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>bladerunner10 schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>...<br />
Das wird sehr umständlich werden, wenn der OP nicht alle Funktionen der map durchschleift. Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
<p>Warum nicht ?</p>
</blockquote>
<p>Die Standardcontainer haben z.B. keinen virtuellen Destruktor was sie in der Regel für eine Ableitung disqualifiziert.</p>
</blockquote>
<p>Ich würde sagen: Was sie für eine <strong>polymorphe</strong> Benutzung disqualifiziert.</p>
<p>Es spricht absolut nichts gegen sowas:</p>
<pre><code class="language-cpp">class MyIntVector : public std::vector&lt;int&gt; {
   // c'tor, etc.
};

MyIntVector  miv;
miv.push_back(42);
</code></pre>
<p>Auch wenn das zugegebenermaßen nicht das schönste Design ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548103</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 10:26:14 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Ich würde sagen: Was sie für eine <strong>polymorphe</strong> Benutzung disqualifiziert.</p>
</blockquote>
<p>Und nicht garantiert das der Destruktor vom Standardcontainer aufgerufen wird.<br />
Na, ob das Sinn macht?</p>
<p>Siehe auch <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-215373-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html" rel="nofollow">diesen Thread</a>.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548135</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 16 Jul 2008 10:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 10:32:55 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Ich würde sagen: Was sie für eine <strong>polymorphe</strong> Benutzung disqualifiziert.</p>
</blockquote>
<p>Und nicht garantiert das der Destruktor vom Standardcontainer aufgerufen wird.</p>
</blockquote>
<p>Diesen Satz verstehe ich nicht.</p>
<p>Fakt ist doch, daß man von std:: Containern ableiten kann und keine Probleme<br />
bekommt, solange man nicht über den Basisklassen Zeiger delete't. Ob das Sinnvoll<br />
ist, hängt vom Anwendungsfall ab.</p>
<p>Das Thema ist jetzt für mich erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548140</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 10:32:55 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 10:51:03 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>Fakt ist doch, daß man von std:: Containern ableiten kann und keine Probleme bekommt, solange man nicht über den Basisklassen Zeiger delete't.</p>
</blockquote>
<p>Man sollte niemals unnötige Fehlerquellen provozieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548147</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 16 Jul 2008 10:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 11:56:51 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
<p>Irgendwie finde ich nicht die Stelle an der bladerunner Vererbung verwendet hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548183</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 16 Jul 2008 11:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 11:59:24 GMT]]></title><description><![CDATA[<p>bladerunner10 schrieb:</p>
<blockquote>
<p>...<br />
Es spricht absolut nichts gegen sowas:</p>
<pre><code class="language-cpp">class MyIntVector : public std::vector&lt;int&gt; {
   // c'tor, etc.
};
</code></pre>
<p>...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1548188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548188</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Wed, 16 Jul 2008 11:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 12:15:54 GMT]]></title><description><![CDATA[<p>Das war aber erst nach diesem Satz <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>asc schrieb:</p>
<blockquote>
<p>Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1548199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548199</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 16 Jul 2008 12:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 12:47:19 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Weil von den Standardkontainern abzuleiten ist nicht vorgesehen!</p>
</blockquote>
<p>Irgendwie finde ich nicht die Stelle an der bladerunner Vererbung verwendet hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Du hättest auch den ganzen Abschnitt lesen sollen. Bladerunner schlägt vor den Container in eine eigene Klasse zu setzen und den Operator[] geprüft anzubieten.</p>
<p>Asc macht dann darauf aufmerksam, dass die Sache umständlich wird, da man am Ende alle Funktionalitäten der Map wrappen müsste. Und weil viele dann wohl als nächstes denken: &quot;ICH KANN JA ABLEITEN&quot;, hat er wohl noch diesen Satz dazugefügt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und ich denke es war gar nicht so dumm, dass er diesen dazugefügt hat, nicht?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548219</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Jul 2008 12:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Map Key == Klassenmember des Objekt?? on Wed, 16 Jul 2008 12:56:00 GMT]]></title><description><![CDATA[<p>Ahh *BLINK*, danke Dravere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548234</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 16 Jul 2008 12:56:00 GMT</pubDate></item></channel></rss>