<?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[Datenstruktur]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Datenstruktur:</p>
<pre><code class="language-cpp">std::map&lt;const std::string, Object*&gt;	mObjects;
</code></pre>
<p>Sprich eine Map von Objekten, wobei der Key ein eindeutiger Name ist.</p>
<p>In einer Schleife bearbeite ich dann alle Objekte:</p>
<pre><code class="language-cpp">ObjectMapIterator itObj = mObjects.begin();
	ObjectMapIterator itObjEnd = mObjects.end();
	for(; itObj != itObjEnd; ++itObj) {
		itObj-&gt;second-&gt;_notifyCurrentCamera(cam);
		itObj-&gt;second-&gt;updateRenderQueue(&amp;mRenderQueue);
	}
</code></pre>
<p>Nun möchte ich zusätzlich die Möglichkeit anbieten, dass man einzelne Objekte aktivieren/deaktivieren kann. Nur wenn ein Objekt aktiv ist, wird es in der Schleife beachtet.<br />
Mir fallen dazu jetzt 2 Möglichkeiten ein:</p>
<ol>
<li>Ich mache eine 2. Datenstruktur std::map&lt;string, bool&gt; mObjActive, in der ich mir separat merke, ob ein Objekt aktiv ist. Das &quot;Problem&quot; ist nur, dass ich dann in der Schleife in der jeweiligen Map suchen muss, ob das aktuelle Objekt aktiv ist. Sprich:</li>
</ol>
<pre><code class="language-cpp">for(; itObj != itObjEnd; ++itObj) {
   if(mObjActive[itObj-&gt;first]) {
      itObj-&gt;second-&gt;_notifyCurrentCamera(cam);
      itObj-&gt;second-&gt;updateRenderQueue(&amp;mRenderQueue);
   }
}
</code></pre>
<p>Ich habe also eine minimal miesere Performance.</p>
<ol start="2">
<li>Ich nehm die Aktiv/Inaktiv Info in die Hauptstruktur auf. Sprich statt</li>
</ol>
<pre><code class="language-cpp">std::map&lt;const std::string, Object*&gt;	mObjects;
</code></pre>
<p>hab ich dann sowas:</p>
<pre><code class="language-cpp">struct ObjAct { Object* obj; bool isActive; };
std::map&lt;const std::string, ObjAct&gt;	mObjects;
</code></pre>
<p>Dann ist die Datenstruktur zwar nicht mehr so schön, aber die Schleife ist performanter:</p>
<pre><code class="language-cpp">for(; itObj != itObjEnd; ++itObj) {
   if(itObj-&gt;second-&gt;isActive) {
      itObj-&gt;second-&gt;obj-&gt;_notifyCurrentCamera(cam);
      itObj-&gt;second-&gt;obj-&gt;updateRenderQueue(&amp;mRenderQueue);
   }
}
</code></pre>
<p>Was würdet ihr nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264083/datenstruktur</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 11:20:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264083.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Apr 2010 15:41:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datenstruktur on Thu, 01 Apr 2010 15:41:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Datenstruktur:</p>
<pre><code class="language-cpp">std::map&lt;const std::string, Object*&gt;	mObjects;
</code></pre>
<p>Sprich eine Map von Objekten, wobei der Key ein eindeutiger Name ist.</p>
<p>In einer Schleife bearbeite ich dann alle Objekte:</p>
<pre><code class="language-cpp">ObjectMapIterator itObj = mObjects.begin();
	ObjectMapIterator itObjEnd = mObjects.end();
	for(; itObj != itObjEnd; ++itObj) {
		itObj-&gt;second-&gt;_notifyCurrentCamera(cam);
		itObj-&gt;second-&gt;updateRenderQueue(&amp;mRenderQueue);
	}
</code></pre>
<p>Nun möchte ich zusätzlich die Möglichkeit anbieten, dass man einzelne Objekte aktivieren/deaktivieren kann. Nur wenn ein Objekt aktiv ist, wird es in der Schleife beachtet.<br />
Mir fallen dazu jetzt 2 Möglichkeiten ein:</p>
<ol>
<li>Ich mache eine 2. Datenstruktur std::map&lt;string, bool&gt; mObjActive, in der ich mir separat merke, ob ein Objekt aktiv ist. Das &quot;Problem&quot; ist nur, dass ich dann in der Schleife in der jeweiligen Map suchen muss, ob das aktuelle Objekt aktiv ist. Sprich:</li>
</ol>
<pre><code class="language-cpp">for(; itObj != itObjEnd; ++itObj) {
   if(mObjActive[itObj-&gt;first]) {
      itObj-&gt;second-&gt;_notifyCurrentCamera(cam);
      itObj-&gt;second-&gt;updateRenderQueue(&amp;mRenderQueue);
   }
}
</code></pre>
<p>Ich habe also eine minimal miesere Performance.</p>
<ol start="2">
<li>Ich nehm die Aktiv/Inaktiv Info in die Hauptstruktur auf. Sprich statt</li>
</ol>
<pre><code class="language-cpp">std::map&lt;const std::string, Object*&gt;	mObjects;
</code></pre>
<p>hab ich dann sowas:</p>
<pre><code class="language-cpp">struct ObjAct { Object* obj; bool isActive; };
std::map&lt;const std::string, ObjAct&gt;	mObjects;
</code></pre>
<p>Dann ist die Datenstruktur zwar nicht mehr so schön, aber die Schleife ist performanter:</p>
<pre><code class="language-cpp">for(; itObj != itObjEnd; ++itObj) {
   if(itObj-&gt;second-&gt;isActive) {
      itObj-&gt;second-&gt;obj-&gt;_notifyCurrentCamera(cam);
      itObj-&gt;second-&gt;obj-&gt;updateRenderQueue(&amp;mRenderQueue);
   }
}
</code></pre>
<p>Was würdet ihr nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876473</guid><dc:creator><![CDATA[GrauerWächter]]></dc:creator><pubDate>Thu, 01 Apr 2010 15:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur on Thu, 01 Apr 2010 15:58:01 GMT]]></title><description><![CDATA[<p>Ich würde das zweite nehmen, jedoch stattdessen ein pair Template nutzen.</p>
<pre><code>std::map&lt;const std::string, std::pair&lt;bool, Object*&gt; &gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1876484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876484</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Thu, 01 Apr 2010 15:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datenstruktur on Thu, 01 Apr 2010 16:12:37 GMT]]></title><description><![CDATA[<p>Ich bin für Lösung 3:<br />
Erweitere direkt die Klasse Object! Aktiv/Inaktiv ist eine Eigenschaft die das Objekt ja gerade ausmachen soll.<br />
Eine weitere Option wäre ableiten, wenn du Object nicht selber verändern kannst. Oder eben dann ein Mapper (deine Lösung 2).</p>
<p>Parallele Listen/std::pair wäre mir zu unsauber. Am Ende entscheidest du dich, dass noch andere Properties hinzu kommen sollen, die dann vllt. nur in einem bestimmten Kontext interessant wären. Aber du musst dann ständig aufpassen, dass sich eine Änderung dann wirklich in allen Teilen auswirkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876491</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Thu, 01 Apr 2010 16:12:37 GMT</pubDate></item></channel></rss>