<?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[Doppel-Map?]]></title><description><![CDATA[<p>Hoi! <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>
<p>Kann sein dass es eine offensichtliche Lösung dafür gibt, aber ich komme gerade nicht drauf, also ...</p>
<p>Ich habe Paare an Werten, die eng miteinander assoziiert sind, nämlich eine ID + zugehörige Stringrepresentation.</p>
<p>Jetzt wollte ich eine (Hash?) Map nutzen, um eine ID in die Stringrepräsentation bzw die Stringrepräsentation in die ID konvertieren zu können.<br />
Nur geht das natürlich mit einer Map immer nur in eine Richtung, dh. ich müsste 2 Maps verwalten, was deutlich erhöhter Aufwand wäre und ein vector wäre bei 10.000 Elementen warscheinlich auch performancetechnisch deutlich unterlegen.</p>
<p>Was wäre die effizienteste Methode dieses Vertauschen von Key und Value zu realisieren?</p>
<p>Grüße und danke schonbmal,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293346/doppel-map</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 09:58:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293346.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Oct 2011 07:59:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Doppel-Map? on Sat, 01 Oct 2011 08:00:01 GMT]]></title><description><![CDATA[<p>Hoi! <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>
<p>Kann sein dass es eine offensichtliche Lösung dafür gibt, aber ich komme gerade nicht drauf, also ...</p>
<p>Ich habe Paare an Werten, die eng miteinander assoziiert sind, nämlich eine ID + zugehörige Stringrepresentation.</p>
<p>Jetzt wollte ich eine (Hash?) Map nutzen, um eine ID in die Stringrepräsentation bzw die Stringrepräsentation in die ID konvertieren zu können.<br />
Nur geht das natürlich mit einer Map immer nur in eine Richtung, dh. ich müsste 2 Maps verwalten, was deutlich erhöhter Aufwand wäre und ein vector wäre bei 10.000 Elementen warscheinlich auch performancetechnisch deutlich unterlegen.</p>
<p>Was wäre die effizienteste Methode dieses Vertauschen von Key und Value zu realisieren?</p>
<p>Grüße und danke schonbmal,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125742</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 01 Oct 2011 08:00:01 GMT</pubDate></item><item><title><![CDATA[Reply to Doppel-Map? on Sat, 01 Oct 2011 08:11:51 GMT]]></title><description><![CDATA[<p>Eine Bimap aus boost vielleicht?<br />
<a href="http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125747</guid><dc:creator><![CDATA[Cachus]]></dc:creator><pubDate>Sat, 01 Oct 2011 08:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Doppel-Map? on Sat, 01 Oct 2011 08:42:27 GMT]]></title><description><![CDATA[<p>Musst du immer wieder neuen strings neue ids zuweisen, oder weißt du zu einem bestimmten Zeitpunkt schon alle strings die jemals auftauchen werden?<br />
Wenn letzteres der Fall ist könntest du einfach einen std::vector&lt; string &gt; nehmen, ihn mit allen strings befüllen, ein std::sort drüber laufen lassen (bin mir nicht sicher ob std::string operator&lt; hat, sonst musst du halt irgendein eigenes Prädikat verwenden, z.B. string::c_str() vergleichen ).<br />
Die id zu einem string ist dann einfach seine Position im vector, die du per std::binary_search mit O( log n ) finden kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125753</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Sat, 01 Oct 2011 08:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Doppel-Map? on Sat, 01 Oct 2011 09:03:38 GMT]]></title><description><![CDATA[<p>Cachus schrieb:</p>
<blockquote>
<p>Eine Bimap aus boost vielleicht?<br />
<a href="http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html</a></p>
</blockquote>
<p>Klingt gut, sehe ich mir mal an, danke! <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>
<blockquote>
<p>Die id zu einem string ist dann einfach seine Position im vector, die du per std::binary_search mit O( log n ) finden kannst.</p>
</blockquote>
<p>Das Problem ist dass die IDs nicht fortlaufend sind.<br />
Eher nach dem Schema: 1, 2, 3, 7, 9, 10, 11, 16, 21<br />
Und darauf habe ich leider keinen Einfluss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125757</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 01 Oct 2011 09:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Doppel-Map? on Sat, 01 Oct 2011 09:33:26 GMT]]></title><description><![CDATA[<p>Dann vielleicht eine andere Lösung:<br />
Du speicherst alle std::string irgendwo.<br />
Dann benutzt du 2 Maps:</p>
<pre><code class="language-cpp">std::map&lt; unsigned int , std::string* &gt; int_string_map;
std::map&lt; std::string* , unsigned int &gt; string_int_map;
</code></pre>
<p>Um die std::strings in einem vector speichern zu können könntest du auch statt pointern einfach Indizes in den maps speichern. Auf die Weise hättest du sowohl für id -&gt; string als auch für string -&gt; id zumindest O( log n ). Kostet halt mehr Speicher und ist ineffektiver beim Einfügen/Entfernen. Ich bin mir nicht sicher, wie boost::bimap umgesetzt ist, aber wenn die sowas auch schon machen, würde ich lieber die fertige Lösung verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125763</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Sat, 01 Oct 2011 09:33:26 GMT</pubDate></item></channel></rss>