<?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[std::map und Ctor]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">std::map&lt;int, Foo&gt; myMap;
std::vector&lt;int&gt; vec;
...
while(..) {

   Obj obj;
   ...

   if(...)
      myMap[id].addObject(obj);

}
</code></pre>
<p>Ich fülle also in der Schleife die Map. Das addObject kann beliebig oft für eine id (int) aufgerufen werden. Wenn das 1. Mal myMap[id] für eine id gemacht wird, die noch nicht in der Map gespeichert ist, dann wird ja implizit ein Foo Objekt angelegt.<br />
Mein Problem ist nun: Alle Foo-Objekte benötigen einen Zeiger auf den vector vec.<br />
Ich könnte jetzt natürlich das if einfach ändern in:</p>
<pre><code class="language-cpp">if(...) {
      myMap[id].addObject(obj);
      myMap[id].setVec(&amp;vec);
}
</code></pre>
<p>Aber das ist ja Verschwendung. Ich würde den vector Zeiger immer und immer wieder setzen, obwohl ichs nur einmal machen müsste. Eigentlich müsste ich den Zeiger im Foo Ctor übergeben, aber das geht bei dem Code hier ja nicht (Default-Ctor wird beim Map operator[] implizit aufgerufen)</p>
<p>Wie mach ich das also, dass ich allen Foo Objekten in der Map einen Zeiger auf vector zuweise (aber nur EINMAL)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276394/std-map-und-ctor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:18:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276394.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Nov 2010 15:02:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map und Ctor on Mon, 01 Nov 2010 15:02:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">std::map&lt;int, Foo&gt; myMap;
std::vector&lt;int&gt; vec;
...
while(..) {

   Obj obj;
   ...

   if(...)
      myMap[id].addObject(obj);

}
</code></pre>
<p>Ich fülle also in der Schleife die Map. Das addObject kann beliebig oft für eine id (int) aufgerufen werden. Wenn das 1. Mal myMap[id] für eine id gemacht wird, die noch nicht in der Map gespeichert ist, dann wird ja implizit ein Foo Objekt angelegt.<br />
Mein Problem ist nun: Alle Foo-Objekte benötigen einen Zeiger auf den vector vec.<br />
Ich könnte jetzt natürlich das if einfach ändern in:</p>
<pre><code class="language-cpp">if(...) {
      myMap[id].addObject(obj);
      myMap[id].setVec(&amp;vec);
}
</code></pre>
<p>Aber das ist ja Verschwendung. Ich würde den vector Zeiger immer und immer wieder setzen, obwohl ichs nur einmal machen müsste. Eigentlich müsste ich den Zeiger im Foo Ctor übergeben, aber das geht bei dem Code hier ja nicht (Default-Ctor wird beim Map operator[] implizit aufgerufen)</p>
<p>Wie mach ich das also, dass ich allen Foo Objekten in der Map einen Zeiger auf vector zuweise (aber nur EINMAL)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973608</guid><dc:creator><![CDATA[mappa_]]></dc:creator><pubDate>Mon, 01 Nov 2010 15:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und Ctor on Mon, 01 Nov 2010 15:17:20 GMT]]></title><description><![CDATA[<p>Alle Map-Einträge schon vor der Schleife anlegen oder nach der Schleife erst den Zeiger auf den vector setzen.</p>
<p>[Edit] Oder einfach mit der &quot;Verschwendung&quot; leben. Über wie viele ms reden wir hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973617</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 01 Nov 2010 15:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und Ctor on Mon, 01 Nov 2010 15:28:41 GMT]]></title><description><![CDATA[<p>lower_bound liefert dir einen iterator auf die Stelle an der das gesuchte Objekt sein sollte. Wenn es dort ist, kannst du einfach .addObject machen, wenn nicht kannst du insert und addObject machen und dem insert den iterator mitgeben um ein O(1) insert zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973623</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 01 Nov 2010 15:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und Ctor on Mon, 01 Nov 2010 15:49:50 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Alle Map-Einträge schon vor der Schleife anlegen oder nach der Schleife erst den Zeiger auf den vector setzen.</p>
<p>[Edit] Oder einfach mit der &quot;Verschwendung&quot; leben. Über wie viele ms reden wir hier?</p>
</blockquote>
<p>Die Verschwendung ist aus Sicht der Performance egal. Ich fands einfach nur nicht so &quot;schön&quot;. Ich geh nach der Schleife einfach über die Map und setz den Pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973631</guid><dc:creator><![CDATA[mappa_]]></dc:creator><pubDate>Mon, 01 Nov 2010 15:49:50 GMT</pubDate></item></channel></rss>