<?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 - key austauschen]]></title><description><![CDATA[<p>Hallo Leute.</p>
<p>Ich habe eine std::map mit einer fixen groesse von N Elementen. Nun kommt es oft vor, dass ich ein Element gegen ein anderes tauschen muss. Sich also der Key aendert. Aktuell mache ich ein remove() und dann ein insert(). Nur habe ich da eine Menge sinnlose Speicherallokationen. Der komplette Knoten kann ja ruhig in der map bleiben, da ich ja immer N elemente habe. Er muss nur anhand des neuen keys neu positioniert werden. Da braucht es eigentlich kein delete + new.</p>
<p>Gibt es da eine portable Moeglichkeit das zu erreichen? Oder muss ich da eine eigene map Klasse schreiben?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221815/std-map-key-austauschen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 03:09:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221815.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Sep 2008 19:58:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map - key austauschen on Wed, 03 Sep 2008 19:58:22 GMT]]></title><description><![CDATA[<p>Hallo Leute.</p>
<p>Ich habe eine std::map mit einer fixen groesse von N Elementen. Nun kommt es oft vor, dass ich ein Element gegen ein anderes tauschen muss. Sich also der Key aendert. Aktuell mache ich ein remove() und dann ein insert(). Nur habe ich da eine Menge sinnlose Speicherallokationen. Der komplette Knoten kann ja ruhig in der map bleiben, da ich ja immer N elemente habe. Er muss nur anhand des neuen keys neu positioniert werden. Da braucht es eigentlich kein delete + new.</p>
<p>Gibt es da eine portable Moeglichkeit das zu erreichen? Oder muss ich da eine eigene map Klasse schreiben?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576105</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:58:22 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Wed, 03 Sep 2008 20:43:16 GMT]]></title><description><![CDATA[<p>wenn du denkst, das das kopieren zu lange dauert, dann gib doch deiner map nur pointer auf die objekte und allozier die Objekte selbst. Ne eigene Mapklasse zu schreiben, halte ich für überflüssig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576132</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 03 Sep 2008 20:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Thu, 04 Sep 2008 12:42:27 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>wenn du denkst, das das kopieren zu lange dauert, dann gib doch deiner map nur pointer auf die objekte und allozier die Objekte selbst. Ne eigene Mapklasse zu schreiben, halte ich für überflüssig.</p>
</blockquote>
<p>Es geht mir nicht um meine Objekte sondern um die Knoten der map. Ich speichere idR nicht viel mehr als 4, maximal 8 Byte objekte in ihr mit trivialen konstruktoren. Also wenn ich nur Zeiger uebergeben wuerde, wuerde mir das nur performance kosten.</p>
<p>denn ein weiterer punkt mit dem ganzen allokieren und deallokieren ist, dass die cache lokalitaet immer schlechter wird.</p>
<p>ich werde aber scheinbar nicht an einer eigenen map vorbei kommen. naja, da kann ich wenigstens den parent zeiger sparen... ist nur doof viel aufwand <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576476</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Thu, 04 Sep 2008 19:41:55 GMT]]></title><description><![CDATA[<blockquote>
<p>. Ich speichere idR nicht viel mehr als 4, maximal 8 Byte objekte in ihr mit trivialen konstruktoren.</p>
</blockquote>
<p>hast recht, dann lohn es sich nicht.</p>
<p>kann es sein, dass es auch eine map variante gibt, mit 3 template args, wobei der 3. für einen Allocator steht?<br />
bei list, string und vector gibts sowas.<br />
Wenn du dir sorgen um die Speicherverwaltung der map machst, kannst du einen eigenen Allocator bauen, und musst nicht komplett map neu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576728</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 04 Sep 2008 19:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 02:25:14 GMT]]></title><description><![CDATA[<p>allocator. nice. manchmal uebersieht man das offensichtlichste.<br />
danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576862</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 02:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 04:33:47 GMT]]></title><description><![CDATA[<p>verdammt.<br />
Die Idee war gut, aber es scheitert daran dass allokatoren in C++ einfach nur unverwendbar sind. Ein fixed_allocator braucht state und den darf er nicht haben...</p>
<p>also, es ist zwar eine Loesung die scheinbar aktuell funktioniert, aber nicht portabel ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576869</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 04:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 06:09:15 GMT]]></title><description><![CDATA[<p>Ich hab noch nie was mit den dingern gemacht.<br />
was gbedeutet &quot;braucht state&quot;?<br />
und warum soll es nicht portable sein? die dinger gehören doch zum standard.<br />
Da muss es doch möglich sein, eine porttable Variante eines Allocators zu schreiben, der sich einmal speicher für n elemente hohlt und dann immer nur diesen zuteilt. (wär mir nicht mal sicher, ob es da nocht schon einen allocator gibt, oder der normale, das nicht sogar schon so macht.<br />
Das würd ich erst mal genauer überprüfen (anhand der speicheradressen der objekte in der map)<br />
map anlegen -&gt; füllen und adressen anschauen -&gt; element löschen -&gt; neues hinzufügen und adresse anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576884</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Fri, 05 Sep 2008 06:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 06:21:02 GMT]]></title><description><![CDATA[<p>Wenn ich eine fixe groesse bei einem allokator angebe, dann muss dieser ja eine eigene liste an frei speicher verwalten. das darf er aber nicht, da die STL verlangt dass allokatoren gleichen typs identisch sind (sobald ich member variablen habe, ist das aber nicht mehr gegeben).</p>
<p>und wenn ich mit statischen variablen arbeite, dann muss ich synchronisieren und das ganze wird sinnlos langsam.</p>
<p>und nein, der standard allokator cacht nichts. zumindest beim vc++.</p>
<p>allokatoren in c++ sind leider totaler schrott <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576892</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 06:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 07:39:29 GMT]]></title><description><![CDATA[<p>ich bin mir dennoch sicher, dass sich dein problem mit allocatoren lösen lässt.</p>
<p>hast du dir das mal angeschaut:</p>
<p><a href="http://www.codeproject.com/KB/cpp/allocator.aspx" rel="nofollow">http://www.codeproject.com/KB/cpp/allocator.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576951</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Fri, 05 Sep 2008 07:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 11:13:24 GMT]]></title><description><![CDATA[<p>boost::pool_allocator</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577074</guid><dc:creator><![CDATA[falscheantwort]]></dc:creator><pubDate>Fri, 05 Sep 2008 11:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 14:37:12 GMT]]></title><description><![CDATA[<p>wie soll man einen allokator schreiben der nur eine fixe anzahl an allokationen erlaubt wenn er keinen state haben darf? es geht einfach nicht.</p>
<p>und boost::pool_allocator hilft da auch nicht weiter - weil allokatoren eben keinen state haben duerfen. allokatoren sind mist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577186</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 14:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 16:59:43 GMT]]></title><description><![CDATA[<p>Für die map sollte so ein Allokator ohnehin nicht funktionieren, weil was die map allokiert ist nicht sizeof(pair), sondern sizeof(node). Der Template-Parameter ist bei den meisten Implementierungen wahrscheinlich ein Fake. In Effective STL steht dazu auch was, die Allokatoren bringen bei Node-Containern normalerweise nichts.</p>
<p>Die Allokation und Deallokation, die du umgehen willst, ist O(1), das finden und einfügen O(log n). Wenn die Allokation trotzdem deine Laufzeit dominiert, hast du wahrscheinlich nicht viele Einträge. In diesem Fall ist es vielleicht besser, gleich einen sortierten vector&lt;pair&gt; zu verwenden. Bei wenigen Elementen ist das einfügen mit verschieben nicht teuer, finden geht in O(log n) und Allokationen hast du keine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577221</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 05 Sep 2008 16:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 17:05:08 GMT]]></title><description><![CDATA[<p>Wenn du das letzte da machen willst, dann sind die *_heap-Funktionen der STL wahrscheinlich sauig praktisch. Ein Heap ist eh das „natürliche“ Pendant zur Map wenn die Größe fix ist.<br />
Das ganze ist dann schneller und portabel und alle sind glücklich <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/1577227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577227</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 05 Sep 2008 17:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 17:09:49 GMT]]></title><description><![CDATA[<p>was verstehst du denn unter state?</p>
<p>ein allocator wird doch mit der map konstruiert und mit der map destructed.</p>
<p>simple ausgesprochen muss dein allokator doch nur folgendes machen:</p>
<p>constructor:<br />
hohle bestimmte menge an speicher (kan zB über templateaargument festgelegt werden)<br />
(der Speicher muss noch nicht mal mit new geholt werden, wenn du die maximale größe deiner map kennst</p>
<p>zb folgendes</p>
<pre><code class="language-cpp">template&lt;class T, N&gt;
class MyAlloc
{
  uint8 m_buf[N*sizeof(T)];   // keine ahnung, ob das mit dem N*sizeof(T) geht, falls nicht, dann doch dynamisch holen.
  // auf keinen fall sowas wie T m_buf[N]; schreiben, da für diese objekte der konstruktor aufgerudfen würde
}

//instanzierung der map würde dann in etwaso aussehen: 
map&lt;keytype, valtype, MyAlloc&lt;valtype, maxsize&gt; &gt; myFixMemPoolMap;
</code></pre>
<p>destruktor:<br />
speicher freigeben, falls welchen geholt</p>
<p>allocate-funkion:<br />
nachschauen, welche stelle frei ist und pointer daruaf geben:</p>
<p>deallocate-funktion:<br />
die stelle, auf die der übergebene pointer zeigt, wieder als frei markieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577229</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Fri, 05 Sep 2008 17:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 17:15:47 GMT]]></title><description><![CDATA[<p>Der Standard sagt</p>
<p>20.1.5/4 schrieb:</p>
<blockquote>
<p>* All instances of a given allocator type are required to be interchangeable and always compare equal to each other.</p>
</blockquote>
<p>Das gilt aber in der Tat nicht mehr, sobald man Member hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577233</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 05 Sep 2008 17:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 18:00:04 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Für die map sollte so ein Allokator ohnehin nicht funktionieren, weil was die map allokiert ist nicht sizeof(pair), sondern sizeof(node).</p>
</blockquote>
<p>Deshalb gibt es rebind...<br />
Sonst waeren allokatoren ja komplett sinnlos.</p>
<blockquote>
<p>Die Allokation und Deallokation, die du umgehen willst, ist O(1), das finden und einfügen O(log n). Wenn die Allokation trotzdem deine Laufzeit dominiert, hast du wahrscheinlich nicht viele Einträge. In diesem Fall ist es vielleicht besser, gleich einen sortierten vector&lt;pair&gt; zu verwenden. Bei wenigen Elementen ist das einfügen mit verschieben nicht teuer, finden geht in O(log n) und Allokationen hast du keine.</p>
</blockquote>
<p>Das Problem ist, dass die lookup table einmal 5 und einmal 500000 eintraege hat. Und ich das vorher nie sagen kann. Ich kann jetzt natuerlich 2 oder 3 implementierungen liefern - aber das hier ist ein super Beispiel warum man nicht die O-Notation als alles bestimmendes kriterium nehmen darf.</p>
<p>Denn allokation ist zwar O(1) aber mit einer sehr hohen konstanten. Solche Probleme wie cache lokalitaet lassen wir mal komplett aussen vor - das kommt naemlich eigentlich auch noch dazu.</p>
<p>Die lookups ansich sind schon enorm schnell - vorallem da ich da auch sehr viel cache. eine hashmap koennte uU etwas speed bringen, aber das haengt dann eben von der hash funktion ab und da ist mir aktuell ein binaerer baum wegen dem besseren worst case lieber.</p>
<p>aktuell laeuft es ja auch mit der sinnlosen allokation und die performance ist tragbar, aber es gefaellt mir dennoch nicht. es waere viel sinnvoller wenn alle nodes in der selben page liegen wuerden, dann gaebe es deutlich weniger page faults.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19908">@vlad_tepesch</a>:<br />
genau das ist aber nicht erlaubt. sobald ein allokator member variablen hat, ist es praktisch unmoeglich ihn portabel zu verwenden.</p>
<p>denn:</p>
<pre><code class="language-cpp">allocator_type alloc;

//folgendes muss aequivalent sein:
allocator_type().allocate(1);
alloc.allocate(1);
</code></pre>
<p>und das ist nicht garantierbar wenn alloc intern speicher verwaltet. man muss den speicher statisch machen und dann muss man synchronisieren und dann wird es teuer.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@filmor</a>:<br />
mhm, *_heap habe ich nicht bedacht. Mal ansehen. Mir ist aktuell unklar wie push_heap in O(log n) laufen kann - aber das laesst sich ja bald heraus finden. uU ist das genau die richtige loesung. mal sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577252</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 18:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 18:17:02 GMT]]></title><description><![CDATA[<p>ah, *_heap ist ziemlich genial - aber leider fuer mich nicht verwendbar da ich iteratoren auf die map brauche die nicht invalidieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577254</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 05 Sep 2008 18:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Fri, 05 Sep 2008 18:57:07 GMT]]></title><description><![CDATA[<p>Heap würde auch nicht sortieren - du bräuchtest aber eine Sortierung, um ein bestimmtes Element schnell zu finden. Damit die Iteratoren nicht invalidieren brauchst du aber tatsächlich Node-Container. Sieh dir mal Boost.Intrusive an, dass sind Container, die die Elemente selber manipulieren um die Verkettung zu realisieren. Das gibt dir eine gute Kontrolle darüber, wie der Speicher verwaltet wird. Vielleicht ist da was brauchbares dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577263</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 05 Sep 2008 18:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 09:14:36 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Heap würde auch nicht sortieren - du bräuchtest aber eine Sortierung, um ein bestimmtes Element schnell zu finden.</p>
</blockquote>
<p>Element finden geht auch in Heaps in O(log n) (weil's ja im Prinzip ein Binärbaum in linearem Speicher ist).</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>ah, *_heap ist ziemlich genial - aber leider fuer mich nicht verwendbar da ich iteratoren auf die map brauche die nicht invalidieren.</p>
</blockquote>
<p>Das hamwa gern, wichtige Voraussetzungen zurückhalten <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="😉"
    /><br />
Aber wenn du eh sehr kleine Objekte da rumschiebst, kannst du dann statt der Iteratoren nicht einfach Kopien von denen halten?<br />
Oder du könntest dir (da du den Heap ja sicher eh anständig kapseln willst) einen Heapiterator schreiben, der sich selbst schön valide hält (wenn Heap geändert, guckstu neu) oder einfach jedesmal das durchsteppen in Kauf nimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577437</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 06 Sep 2008 09:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 10:09:15 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Heap würde auch nicht sortieren - du bräuchtest aber eine Sortierung, um ein bestimmtes Element schnell zu finden.</p>
</blockquote>
<p>Element finden geht auch in Heaps in O(log n) (weil's ja im Prinzip ein Binärbaum in linearem Speicher ist).</p>
</blockquote>
<p>Nein, denn es ist zwar im Prinzip ein Binärbaum (zumindest der Binäre Heap), aber eben kein Suchbaum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577450</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Sat, 06 Sep 2008 10:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 10:08:44 GMT]]></title><description><![CDATA[<p>*doppelpost*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577459</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Sat, 06 Sep 2008 10:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 11:27:54 GMT]]></title><description><![CDATA[<p>life schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Heap würde auch nicht sortieren - du bräuchtest aber eine Sortierung, um ein bestimmtes Element schnell zu finden.</p>
</blockquote>
<p>Element finden geht auch in Heaps in O(log n) (weil's ja im Prinzip ein Binärbaum in linearem Speicher ist).</p>
</blockquote>
<p>Nein, denn es ist zwar im Prinzip ein Binärbaum (zumindest der Binäre Heap), aber eben kein Suchbaum.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577500</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 06 Sep 2008 11:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 11:29:27 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_36_0/doc/html/intrusive/avl_set_multiset.html" rel="nofollow">http://www.boost.org/doc/libs/1_36_0/doc/html/intrusive/avl_set_multiset.html</a><br />
Ich sehe keine map, aber man könnte hier ein pair reintun und nur nach dem key vergleichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577503</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 06 Sep 2008 11:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Sat, 06 Sep 2008 11:48:36 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p><a href="http://www.boost.org/doc/libs/1_36_0/doc/html/intrusive/avl_set_multiset.html" rel="nofollow">http://www.boost.org/doc/libs/1_36_0/doc/html/intrusive/avl_set_multiset.html</a><br />
Ich sehe keine map, aber man könnte hier ein pair reintun und nur nach dem key vergleichen.</p>
</blockquote>
<p>rbtree ist ein binaerer suchbaum</p>
<p>aber boost::intrusive ist hier ein genialer ansatz, da ich die nodes ploetzlich in der liste und im baum halten kann - ich habe dadurch eine enorm gute cache lokalitaet und kann alle nodes im voraus allokieren... muss nur die zeit finden es zu implementieren - aber auf der todo liste steht es schonmal oben <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/1577522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577522</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 06 Sep 2008 11:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Thu, 11 Sep 2008 19:00:50 GMT]]></title><description><![CDATA[<p>Und, hat's gerockt? Vielleicht brauche ich sowas auch mal... <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/1580465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580465</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 11 Sep 2008 19:00:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::map - key austauschen on Thu, 11 Sep 2008 19:24:02 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Und, hat's gerockt? Vielleicht brauche ich sowas auch mal... <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>
</blockquote>
<p>wie koennte es anders sein: ich haenge am design fest.</p>
<p>ich will es moeglichst generisch machen, denn hardcoded rbtree und list zu vereinen waere uncool. und das wirft eine menge design entscheidungen auf und ich habe noch keinen schoenen weg gefunden.</p>
<p>das ist das privileg wenn man das als hobby projekt macht <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="😉"
    /> ich wuenschte den luxus haette ich immer. aber dafuer dauert sowas triviales halt auch ein monat oder mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580475</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 11 Sep 2008 19:24:02 GMT</pubDate></item></channel></rss>