<?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[Iterator zwischenspeichern]]></title><description><![CDATA[<p>Hallo!</p>
<p>Es liegen Daten in einer</p>
<pre><code class="language-cpp">std::multimap&lt;size_t, size_t&gt;
</code></pre>
<p>vor, die in eine Liste eingetragen werden sollen. Jedes Item hat einen Index und kann noch zusätzlichen einen belibiegen Wert vom Typ long (uData) speichern.<br />
Wenn ein Eintrag aus der Liste gewählt wird um ihn anzuzeigen, zu bearbeiten etc. müssen die Daten vorher aus der multimap geholt werden werden.</p>
<p>Dazu gehe ich bisher wie folgt vor.</p>
<pre><code class="language-cpp">// Funktion wird aufgerufen wenn ein Item gewählt wurde
void GetItem(Item * pItem)
{
  std::multimap&lt;size_t, size_t&gt;::const_iterator Iter = MyMap.begin();

  for (size_t i = 0; i &lt; pItem-&gt;iIndex; i++)
      Iter++;

  // Funktion die die Daten verarbeitet
  Foo(Iter-&gt;first, Iter-&gt;second);
}
</code></pre>
<p>Dieses Umweg über die Schleife und das Inkrementieren des Iterators finde ich ziemlich umständlich. Gibt es eine Möglichkeit den Iterator (Position, Zeiger, irgendwas) in uData (siehe oben) zwischenzuspeichern und ihn dann damit in der Funktion GetItem zu initialisieren?</p>
<p>Schönen Gruß<br />
Olaf</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209145/iterator-zwischenspeichern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 11:31:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209145.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Mar 2008 10:46:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 10:46:07 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Es liegen Daten in einer</p>
<pre><code class="language-cpp">std::multimap&lt;size_t, size_t&gt;
</code></pre>
<p>vor, die in eine Liste eingetragen werden sollen. Jedes Item hat einen Index und kann noch zusätzlichen einen belibiegen Wert vom Typ long (uData) speichern.<br />
Wenn ein Eintrag aus der Liste gewählt wird um ihn anzuzeigen, zu bearbeiten etc. müssen die Daten vorher aus der multimap geholt werden werden.</p>
<p>Dazu gehe ich bisher wie folgt vor.</p>
<pre><code class="language-cpp">// Funktion wird aufgerufen wenn ein Item gewählt wurde
void GetItem(Item * pItem)
{
  std::multimap&lt;size_t, size_t&gt;::const_iterator Iter = MyMap.begin();

  for (size_t i = 0; i &lt; pItem-&gt;iIndex; i++)
      Iter++;

  // Funktion die die Daten verarbeitet
  Foo(Iter-&gt;first, Iter-&gt;second);
}
</code></pre>
<p>Dieses Umweg über die Schleife und das Inkrementieren des Iterators finde ich ziemlich umständlich. Gibt es eine Möglichkeit den Iterator (Position, Zeiger, irgendwas) in uData (siehe oben) zwischenzuspeichern und ihn dann damit in der Funktion GetItem zu initialisieren?</p>
<p>Schönen Gruß<br />
Olaf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481240</guid><dc:creator><![CDATA[Olaf.100]]></dc:creator><pubDate>Thu, 27 Mar 2008 10:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 11:06:23 GMT]]></title><description><![CDATA[<p>Geht nicht folgendes?</p>
<pre><code class="language-cpp">Foo((MyMap.begin() + pItem-&gt;iIndex)-&gt;first, 
    (MyMap.begin() + pItem-&gt;iIndex)-&gt;second);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1481248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481248</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 27 Mar 2008 11:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 11:12:58 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Geht nicht folgendes?</p>
<pre><code class="language-cpp">Foo((MyMap.begin() + pItem-&gt;iIndex)-&gt;first, 
    (MyMap.begin() + pItem-&gt;iIndex)-&gt;second);
</code></pre>
</blockquote>
<p>Nein, leider nicht. Maps habe keinen wahlfreien Zugriff sondern sind bidirektional.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481249</guid><dc:creator><![CDATA[Olaf.100]]></dc:creator><pubDate>Thu, 27 Mar 2008 11:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 11:17:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void GetItem(Item * pItem)
{
  std::multimap&lt;size_t, size_t&gt;::const_iterator Iter = MyMap.find(pItem-&gt;iIndex);

  // Funktion die die Daten verarbeitet
  Foo(Iter-&gt;first, Iter-&gt;second);
}
</code></pre>
<p>//edit ahh hab mich verlesen. das erste size_t der map ist nicht derselbe index wie der in pItem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481251</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 27 Mar 2008 11:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 11:35:48 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>//edit ahh hab mich verlesen. das erste size_t der map ist nicht derselbe index wie der in pItem?</p>
</blockquote>
<p>Doch, eigentlich schon. Aber da es eine Multimap ist, bringt suchen nach dem Index (Schlüssel) nichts, da es mehrere Elemente mit dem gleichem Schlüssel gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481264</guid><dc:creator><![CDATA[Olaf.100]]></dc:creator><pubDate>Thu, 27 Mar 2008 11:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 11:38:18 GMT]]></title><description><![CDATA[<p>std::advance</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481267</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Mar 2008 11:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 12:08:55 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>std::advance</p>
</blockquote>
<p>Habe ich vorher auch schon probiert, jedoch einen nicht initilierten INterator übergeben. Dann wurde eine Ausnahme geworfen.</p>
<p>advance ist ja auch nur eine Schleife ähnlich wie ich sie habe. Bringt es trotzdem Vorteile std::advance zu nutzen?</p>
<p>Olaf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481300</guid><dc:creator><![CDATA[Olaf.100]]></dc:creator><pubDate>Thu, 27 Mar 2008 12:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 12:21:20 GMT]]></title><description><![CDATA[<p>Es brächte dann Vorteile, wenn Du irgendwann mal auf vector oder deque wechselst, da dort die Verschiebung durch eine einfache Addition statt über eine Schleife gemacht werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481313</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Mar 2008 12:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 12:40:07 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Es brächte dann Vorteile, wenn Du irgendwann mal auf vector oder deque wechselst, da dort die Verschiebung durch eine einfache Addition statt über eine Schleife gemacht werden kann.</p>
</blockquote>
<p>Ein Wechsel ist nicht vorgesehen, da ich Schlüssel/Wert Paare benötige.<br />
Recht herzlichen Dank auch.</p>
<p>Olaf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481336</guid><dc:creator><![CDATA[Olaf.100]]></dc:creator><pubDate>Thu, 27 Mar 2008 12:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 13:55:41 GMT]]></title><description><![CDATA[<p>Olaf.100 schrieb:</p>
<blockquote>
<p>Bringt es trotzdem Vorteile std::advance zu nutzen?</p>
</blockquote>
<p>- Du hast in deinem Code keine unschoenen Schleifen stehen -&gt; der Code ist kuerzer und uebersichtlicher.<br />
- Bei einer Schleife muesste ein fremder Leser (z.B. du in 5 Monaten) erst nachvollziehen, was in der Schleife passiert - std::advance sollte jedem bekannt sein -&gt; der Code ist schneller verstaendlich und daher besser wartbar.<br />
- reuse - du benutzt mit std::advance fertigen Code, der zigmal getestet ist und korrekt arbeitet. In einer eigenen Schleifenimplementation koennen sich leichter Tippfehler, logische Fehler usw. einschleichen -&gt; der Code ist sicherer und schneller implementiert.</p>
<p>Reicht das an Vorteilen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1481435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481435</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 Mar 2008 13:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator zwischenspeichern on Thu, 27 Mar 2008 14:12:39 GMT]]></title><description><![CDATA[<p>Den Iterator zwischenzuspeichern darfst du nur, wenn sich die Map nicht mehr ändert (weil dadurch sich ja die Index-Reihenfolge ändern könnte).</p>
<p>Ich verstehe auch irgendwie deinen Ansatz nicht richtig.<br />
Auf eine (Multi)map greift man ja normalerweise mithilfe des Schlüssels zu (und nicht über einen Index, weil dann könntest du ja gleich einen std::vector o.ä. benutzen).</p>
<p>Ich nehme aber mal an, du hast ein ListBox o.ä.<br />
Warum verknüpfst du deine Listeneinträge dann nicht direkt mit den Items (du brauchst doch gar nicht den Zwischenweg über die Map gehen)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481463</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 27 Mar 2008 14:12:39 GMT</pubDate></item></channel></rss>