<?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 mit Einfuegereihenfolge ?]]></title><description><![CDATA[<p>Hallo.<br />
Ich brauche eine map mit strings als Schluessel und Zeiger als Werte, die der Reihenfolge des Einfuegens geordnet sind - laesst sich sowas ohne Zweitcontainer (wie einen vector) regeln?<br />
Im Moment benutze ich unordered_map - aber hier ist keinerlei Reihenfolge garantiert, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313877/std-map-mit-einfuegereihenfolge</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 22:36:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313877.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Feb 2013 20:24:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:24:29 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich brauche eine map mit strings als Schluessel und Zeiger als Werte, die der Reihenfolge des Einfuegens geordnet sind - laesst sich sowas ohne Zweitcontainer (wie einen vector) regeln?<br />
Im Moment benutze ich unordered_map - aber hier ist keinerlei Reihenfolge garantiert, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298396</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:31:50 GMT]]></title><description><![CDATA[<p>Nein, <code>unordered_map</code> ist nicht geordnet.<br />
Warum nimmst du nicht eine <code>std::map</code> oder <code>std::multimap</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298398</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:33:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Im Moment benutze ich unordered_map - aber hier ist keinerlei Reihenfolge garantiert, oder?</p>
</blockquote>
<p>also soweit ich weiß heißt unordered in dem fall, dass die elemente nicht geordnet werden, also in der reihenfolge des einfügens bleiben.<br />
ohne mehr informationen kann ich jetzt nicht sagen ob du in deinm fall besser std::vector nehmen solltest <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=":/"
      alt="😕"
    /></p>
<p>EDIT: ups, da war jemand schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298399</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:41:05 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Ich brauche eine map mit strings als Schluessel und Zeiger als Werte, <strong>die der Reihenfolge des Einfuegens</strong> geordnet sind</p>
</blockquote>
<p>WTF, das ist genau das Gegenteil von einer Map. Was soll passieren, wenn du zwei mal den gleichen Schlüssel einfügst? Soll der dann zwei mal vor kommen? Oder soll der alte Wert überschrieben werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298401</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:43:39 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/unordered_map/unordered_map/" rel="nofollow">http://www.cplusplus.com/reference/unordered_map/unordered_map/</a></p>
<blockquote>
<p>Internally, the elements in the unordered_map are not sorted in any particular order with respect to either their key or mapped values, but organized into buckets depending on their hash values to allow for fast access to individual elements directly by their key values (with a constant average time complexity on average).</p>
</blockquote>
<p>Zum Thema Hashing kannst du ja mal bei wikipedia lesen:<br />
<a href="http://de.wikipedia.org/wiki/Hashing" rel="nofollow">http://de.wikipedia.org/wiki/Hashing</a><br />
oder es sollte genug andere Quellen im Netz geben.</p>
<p>Gruß<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298402</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Tue, 12 Feb 2013 20:56:10 GMT]]></title><description><![CDATA[<p>Für was brauchst du denn die Einfügereihenfolge? Entweder greifst du auf ein Element über seine Position (wie es z.B. bei Vector der Fall ist) oder du machst das über den Key-Wert. Kannst du etwas genauer erklären, was du vorhast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298410</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 10:46:54 GMT]]></title><description><![CDATA[<p>Ich hatte mir extra dafür eine eigene Klasse geschrieben, welche intern eine Map und List parallel hält. Bei Bedarf kann ich den Source zuhause mal raussuchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298548</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 13 Feb 2013 10:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 11:50:56 GMT]]></title><description><![CDATA[<p>queue</p>
<blockquote>
<p>Bei Bedarf kann ich den Source zuhause mal raussuchen</p>
</blockquote>
<p>Nee, erklaer erstmal das Problem. Warum Zweitcontainer? Was willst du machen, nicht wie!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298565</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 13 Feb 2013 11:50:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 12:22:39 GMT]]></title><description><![CDATA[<p><code>boost::multiindex</code> bietet sowas (und vielen anderes). Eventuell ist das in diesem Fall aber Overkill.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298584</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 13 Feb 2013 12:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 12:54:52 GMT]]></title><description><![CDATA[<p>warum nicht eine list&lt;pair&lt;string, int&gt;&gt; ? oder etwas ähnliches in der Art? Dann kannst Du Dir immer noch Zugriffsfunktionen dafür schreiben. Wobei ich nicht verstehe, warum die Reihenfolge des Einfügens von Bedeutung sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298593</guid><dc:creator><![CDATA[lisat]]></dc:creator><pubDate>Wed, 13 Feb 2013 12:54:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 13:05:39 GMT]]></title><description><![CDATA[<p>Deshalb fragt hier ja jeder nach dem Sinn bzw. dem Ziel vom TE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298596</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 13 Feb 2013 13:05:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Wed, 13 Feb 2013 23:51:48 GMT]]></title><description><![CDATA[<p>In dem Container sind Objekte, die auf dem Bildschirm gezeichnet werden. Da sich diese ueberlappen koennen ist die Reihenfolge des Zeichnens wichtig.<br />
Die map Schluessel (als String) sind die Bezeichner der Objekte und werden vom Benutzer selbst festgelegt. Je nach Eingaben des Benutzers muss ich dann per Bezeichner auf die Objekte zugreifen koennen.</p>
<p>Die pair/find Loesung ist zu langsam, da O(n).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a><br />
Das hatte ich auch vor, aber ich hatte doch noch gehofft, dass es eine schoenere Loesung gibt. Naja, dann eben nicht ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298764</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Wed, 13 Feb 2013 23:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Thu, 14 Feb 2013 07:42:33 GMT]]></title><description><![CDATA[<p>Naja, die unordered Container müssten eine Zugriffszeit von O(1) haben (weil Hashing), sortieren ist damit aber nicht.</p>
<p>Das hast du aber wieder bei einer normalen std::map, dort müsste die Zugriffszeit bei O(log n) liegen (weil Baum).</p>
<p>Auch genannt wurde ein queue, bzw in dem Fall der priority_queue (ist das Wort queue jetzt eigentlich männlich, weiblich oder beides?!? ich sag nur &quot;Der Kalkül&quot;)</p>
<p>Aber du willst Speed, vergleichst aber dann Strings? Widerspricht sich in meinen Augen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298773</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 14 Feb 2013 07:42:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Thu, 14 Feb 2013 13:10:56 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Auch genannt wurde ein queue, bzw in dem Fall der priority_queue (ist das Wort queue jetzt eigentlich männlich, weiblich oder beides?!? ich sag nur &quot;Der Kalkül&quot;)</p>
</blockquote>
<p>&quot;Die&quot; Warteschlange.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298859</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 14 Feb 2013 13:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Thu, 14 Feb 2013 15:53:37 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>&quot;Die&quot; Warteschlange.</p>
</blockquote>
<p>Das <code>std::set</code> = das Menge?</p>
<p>Ansonsten geht die direkte Übersetzung von Datenstrukturen aber ziemlich oft mit den Artikeln auf:</p>
<ul>
<li>der Vector (Vektor)</li>
<li>die List (Liste)</li>
<li>die Deque (doppel-endige Warteschlange)</li>
<li>die Map (Karte/Abbildung)</li>
<li>das Array (Feld)</li>
<li>der Stack (Stapel)</li>
<li>die Queue (Warteschlange)</li>
<li>der Tree (Baum)</li>
<li>der Heap (Haufen)</li>
</ul>
<p>Bei &quot;Set&quot; könnte das Neutrum daher rühren, dass es bereits deutsche Nomen wie das &quot;Filmset&quot; gibt. Gleiches gilt wohl für den &quot;String&quot; <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/2298902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298902</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 14 Feb 2013 15:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Fri, 15 Feb 2013 08:00:12 GMT]]></title><description><![CDATA[<p>Eric, Dir ist aber schon klar, dass die Landau Symbole nur das asymptotische Verhalten beschreiben und nichts über den absoluten Bedarf, insbesondere bei geringer Zahl von Elementen aussagen?</p>
<p>Und wie Skym0sh0 bereits geschrieben hat: Stringvergleich (und u.U. das Bilden von Hashes) sind nicht unbedingt die schnellsten Vorgehensweisen beim Adressieren von Elementen in einem Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299001</guid><dc:creator><![CDATA[lisat]]></dc:creator><pubDate>Fri, 15 Feb 2013 08:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Fri, 15 Feb 2013 08:13:23 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Die map Schluessel (als String) sind die Bezeichner der Objekte und werden vom Benutzer selbst festgelegt. Je nach Eingaben des Benutzers muss ich dann per Bezeichner auf die Objekte zugreifen koennen.</p>
</blockquote>
<p>Also: eine her geringe Anzahl von Objekten und der Zugriff über die map wird signifikant seltener eintreten als das Zeichnen?</p>
<p>=&gt; vector&lt;pair&lt;string,Objekt&gt; &gt; mit push_back für neue Elemente. nach namn gesucht wird mit find_if oder ähnlichem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299002</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 15 Feb 2013 08:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Fri, 15 Feb 2013 08:13:33 GMT]]></title><description><![CDATA[<p>Naja, Stringvergleiche sollten in O(n) zu schaffen sein (wobei n die Länge des Strings) und Hashes sollten in O(1) machbar sein (O(n) wäre hier nur nutzbar, wenn n die Größe des Datentyps ist).</p>
<p>Gib deinen Objekten eine z Koordinate mit und ordne sie in deiner map nach eben diesen Koordinaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299003</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 15 Feb 2013 08:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Fri, 15 Feb 2013 09:10:54 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Naja, Stringvergleiche sollten in O(n) zu schaffen sein (wobei n die Länge des Strings) und Hashes sollten in O(1) machbar sein (O(n) wäre hier nur nutzbar, wenn n die Größe des Datentyps ist).</p>
</blockquote>
<p>Wobei das auch wieder nur theoretische Betrachtungen sind.<br />
Zb der GCC verwendet builtin strcmp, was sauschnell ist, wenn ein String eine Compilezeitkonstante ist.</p>
<p>In einer Hashmap muss zuerst der KOMPLETTE String gehasht werden, und dann muss nochmal mindestens 1 Knoten an einer linked List gehangelt werden, was nach Cache-misses schreit.</p>
<p>Wenn die Map sehr stark unterschiedliche Strings enthält wie</p>
<pre><code>map&lt;string, int&gt; alter;
alter[&quot;Albert&quot;] = 25;
alter[&quot;Berta&quot;] = 35;
alter[&quot;Christoph&quot;] = 45;
...

int alterVonMarianne = alter[&quot;Marianne&quot;];
</code></pre>
<p>kann eine naive implementierung über einen Vector relativ lange effizient genug sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299013</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 15 Feb 2013 09:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Sun, 17 Feb 2013 22:41:00 GMT]]></title><description><![CDATA[<p>Erstmal danke fuer die Vorschlaege.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Gib deinen Objekten eine z Koordinate mit und ordne sie in deiner map nach eben diesen Koordinaten.</p>
</blockquote>
<p>So hab ichs jetzt gemacht, da so ne z Koordinate sowieso noch eine gute Idee war <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>
<p>Aber wie kann ich sowas am bestem implementieren? map/multimap kann ja nur nach key sortieren...</p>
<p>Ich habs jetzt so gemacht, dass ich mir ne Klasse geschrieben habe welche eine std::multimap abstrahiert die die z Koordinaten als Key verwenden und ein pair aus string und zeiger als mapped_type. Key-Zugriff ist zwar nicht mehr direkt moeglich (sondern es muss nach mit find_if gesucht werden), aber notfalls kann ich noch einen zusaetzlichen unordered_map container verwenden, falls es zu langsam wird... Aber im Moment klappts ganz gut so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299604</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Sun, 17 Feb 2013 22:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit Einfuegereihenfolge ? on Sun, 17 Feb 2013 23:03:28 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Die map Schluessel (als String) sind die Bezeichner der Objekte und werden vom Benutzer selbst festgelegt. Je nach Eingaben des Benutzers muss ich dann per Bezeichner auf die Objekte zugreifen koennen.</p>
</blockquote>
<p>Ich würde mit einer separaten unordered_map arbeiten, die strings auf Objekte abbildet. Insbesondere, da es wohl wesentlich wichtiger ist, schnell über die Objekte iterieren zu können. Der User wird kaum merken, ob der Lookup eines Objektes über seinen Namen jetzt 10 Mikrosekunden oder 100 Mikrosekunden dauert...</p>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Die pair/find Loesung ist zu langsam, da O(n).</p>
</blockquote>
<p>Wieviele zehntausend Objekte sind es denn, dass das zu langsam ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299607</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 17 Feb 2013 23:03:28 GMT</pubDate></item></channel></rss>