<?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[set oder map?]]></title><description><![CDATA[<p>hi</p>
<p>Welcher Container hat den schnelleren Zugriff mit find()<br />
Ein Set oder eine Map?<br />
Die Elemente sind structs, die ich per ID und einer Vergleichsfunktion vergleichen kann.</p>
<p>Danke im voraus <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/topic/175953/set-oder-map</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 09:03:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175953.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Mar 2007 18:28:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 18:28:09 GMT]]></title><description><![CDATA[<p>hi</p>
<p>Welcher Container hat den schnelleren Zugriff mit find()<br />
Ein Set oder eine Map?<br />
Die Elemente sind structs, die ich per ID und einer Vergleichsfunktion vergleichen kann.</p>
<p>Danke im voraus <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/1246261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246261</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Thu, 15 Mar 2007 18:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 18:46:18 GMT]]></title><description><![CDATA[<p>imho haben beide O(n) = log n<br />
von daher dürften beide gleich schnell sein.<br />
Map verwendest du, wenn du einem Schlüssel einem Wert zuordnenn willst, ansonsten set, wenn du nur die Schlüssel speichern willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246268</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 15 Mar 2007 18:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 19:06:40 GMT]]></title><description><![CDATA[<p>Danke</p>
<p>Ich brauch einfach schnelles find(), anhand der ID hab ich ja schon nen Schlüssel im struct.</p>
<pre><code class="language-cpp">struct Weapon
    {
        unsigned int id;
        unsigned short type;
        unsigned short level;
        unsigned short strength;
        unsigned short speed;
        unsigned short weight;
        unsigned short range;
        unsigned int price;
        std::string name;

        bool operator&lt;( const Weapon&amp; other )
        {
            return id &lt; other.id;
        }
    };

std::set&lt;Weapon&gt; weapons;
</code></pre>
<p>find soll dann mit einer Referenz einer Weapon struct aus dem Container aufgerufen werden.</p>
<pre><code class="language-cpp">void fight( const Weapon&amp; val )
{
    weapon = *(weapons.find( val ) );
</code></pre>
<p>Macht das so Sinn?<br />
Gibts was effektiveres in dem Fall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246276</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Thu, 15 Mar 2007 19:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 19:10:08 GMT]]></title><description><![CDATA[<p>am effektivsten kommst du wohl mit einer hash_map, ich weiß nicht ob map das gleiche ist, bei einer guten hash funktion hast du im Mittel O(1) zugriffszeit, sofern nicht zuviele schlüssel doppelt vergeben werden. (Im worst case aber O(n) *gg* aber das nur bei einer unglaublich miesen hashfunktion )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246279</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Thu, 15 Mar 2007 19:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 19:41:13 GMT]]></title><description><![CDATA[<p>Suchzeit... set vs. map wird ziemlich gleich sein, hash_set vs. hash_map wird genauso ziemlich gleich sein.</p>
<p>Ob &quot;hash oder nicht hash&quot; hängt denke ich davon ab:</p>
<ol>
<li>ob man die Einträge sortiert braucht (dann wohl eher set/map) und</li>
<li>ob es einen stört ggf. ein wenig Speicher zu verschwenden und</li>
<li>ob man einen schnell erzeugbaren, schnell vergleichbaren und gut verteilten Hashcode für die Elemente berechnen kann</li>
</ol>
<p>In deinem Fall würde ich vermutlich ein hash_set nehmen, direkt mit &quot;id&quot; als Hashvalue -- es sei denn eben du musst nach ID sortiert auf die Elemente zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246299</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 15 Mar 2007 19:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 19:55:07 GMT]]></title><description><![CDATA[<ol>
<li>Nein</li>
<li>Nein</li>
<li>Tja, wie mach ich das?</li>
</ol>
<p>Also meine ID ist 4-stellig.<br />
1. Ziffer: Art des Items (Waffe, Rüstung ...)<br />
2. Ziffer: Variante (Schwert, Axt ... bzw. Helm, Brustpanzer ...)<br />
3. Ziffer: Level ( 1, 2 ...)<br />
4. Ziffer: noch unbenutzt</p>
<p>Dh. es ist relativ einfach von Ziffer zu Ziffer, wie in nem Baum runter zu gehen.</p>
<pre><code>1---0---1---1  --&gt; Schwert
 \   \--2---1  --&gt; Langschwert
  \   \-3---1  --&gt; Claymore
   -1---1---1  --&gt; Axt
     \--2---1  --&gt; Breitaxt
      \-3---1  --&gt; Kriegeraxt

2---0---1---1  --&gt; etc...
 \   \--2---1
  \   \-3---1
   -1---1---1
     \--2---1
      \-3---1
</code></pre>
<p>Kann man das als Hash verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246305</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Thu, 15 Mar 2007 19:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 20:09:07 GMT]]></title><description><![CDATA[<p>Ich schätze das kann man als Hash verwenden, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246314</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 15 Mar 2007 20:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 20:20:14 GMT]]></title><description><![CDATA[<p>Ok, letzte dumme Frage (hoff ich:))<br />
mit hash_set meinst du tr1::unordered_set? (im gcc 4.1.2 mit dabei)</p>
<p>Wenn ja, gibt es dazu Beispiele zur Verwendung?<br />
Wenn nein, was meinst du dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246323</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Thu, 15 Mar 2007 20:20:14 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Thu, 15 Mar 2007 22:59:38 GMT]]></title><description><![CDATA[<p>Keine Ahnung wie TR1 das nennt, die ganzen Compiler die das als Extension anbieten nennen das hash_set. Zumindest die die ich kenne. Ich *schätze* mal stark dein unordered_set wird mein hash_set sein <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>Bei MSVC lebt das Teil in stdext::, bei GNU in __gnu_cxx::, bei der Dinkumware gleich in std::. Die SGI und STLport bieten die Klasse auch an, keine Ahnung wie dort der Namespace heisst.</p>
<p>Doku dazu findest du z.B. hier:<br />
<a href="http://msdn2.microsoft.com/en-us/library/00htc7h2(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/00htc7h2(VS.80).aspx</a><br />
<a href="http://www.sgi.com/tech/stl/hash_set.html" rel="nofollow">http://www.sgi.com/tech/stl/hash_set.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246382</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 15 Mar 2007 22:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 07:05:45 GMT]]></title><description><![CDATA[<p>Im TR1 heißen die Hashcontainer std::tr1::unordered_*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246435</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 16 Mar 2007 07:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 09:35:50 GMT]]></title><description><![CDATA[<p>Aehm, warum heisst die hashmap <strong>hash</strong>map?</p>
<p>Unter hash versteh ich ich: nen kleinerer wert (hash) der aus einer groesseren Datenstruktur generiert wird aber trotzdem zu einem hohen prozentsatz eindeutig fuer den grossen wert ist.</p>
<p>Damit machen hashmaps fuer mich nur bei groesseren Elementen Sinn ???</p>
<p>wenn ich nach ner ID sortiere (32 bit integer) hab ich eh schon die groesse mit der der prozessor am schnellsten zurande kommt. du wuerdest sogar schneller fahren wenn du kleinere IDs auf 32 bit &quot;aufbohrst&quot; ...</p>
<blockquote>
<p>ob man die Einträge sortiert braucht (dann wohl eher set/map)</p>
</blockquote>
<p>wenn ich auf was schnell zugreifen will, brauch ich den Key (hash) soweiso in sortierter folge, anders gehts ned, also irgendwas wird jeder container mit O(n) = log n sortiert ablegen.</p>
<p>@Eldoran</p>
<p>wenn deine ID das ist was der Name vorgibt (eineindeutig fuer jedes element) und die ID wirklich dein suchkriterium sein sollt, brauchst du den ganzen hash geroedel sowieso nicht.</p>
<p>map oder set ist performance technisch ned ganz egal ...<br />
beim set werden die structuren gegeneinander verglichen, mit ner operatorueberladung koenntest das ganz einfach auf die ID in der strukt mappen, so dass nur nach der id sortiert wird, aber, beim einfuegen wird das ganze set umsortiert, dabei werden elemente des sets ein oder mehrmals kopiert. bei Dir iss das immerhin eine komplexere struct.</p>
<p>bei der map wird hingegen nur der key sortiert und der value referenziert, also nur die IDs wuerden hin und her kopiert werden, waerend der value einmal in den allokator geschrieben wuerde und dann bis zum remove oder nen edit ned mehr angefasst ....</p>
<p>also besser :</p>
<pre><code class="language-cpp">typedef std::map&lt;unsigned int, weapon&gt; WeaponMapT; 

WeaponMapT mWeapons; 

// irgendwo nach ner waffe mit der id suchen, irgend ne methode an ner klasse

const WeaponMapT * getWeapon(unsigned int ID) const 
{
    WeaponMapT::const_iterator itfind = mWeapons.find(ID);
    return itfind != mWeapons.end() ? &amp;(*itfind).second : NULL;
}
WeaponMapT * getWeapon(unsigned int ID)
{
    WeaponMapT::iterator itfind = mWeapons.find(ID);
    return itfind != mWeapons.end() ? &amp;(*itfind).second : NULL;
}
</code></pre>
<p>Ciao ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246499</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 16 Mar 2007 09:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 09:55:11 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>Damit machen hashmaps fuer mich nur bei groesseren Elementen Sinn ???</p>
<p>wenn ich nach ner ID sortiere (32 bit integer) hab ich eh schon die groesse mit der der prozessor am schnellsten zurande kommt. du wuerdest sogar schneller fahren wenn du kleinere IDs auf 32 bit &quot;aufbohrst&quot; ...</p>
</blockquote>
<p>Zumindest die letzte Aussage ist ganz schöner Quatsch. Denn das würde ja bedeuten, dass Du eine Hash-Tabelle von der Größe 32 Bit brauchst -- also mit 2^32 Feldern. Das ist nicht realistisch. Statttdessen werden generell nur die least significant bits verwendet, um aus einem Hashwert den Index für die Tabelle zu bilden. Daher ergibt es natürlich auch keinen Sinn, kleinere Werte auf 'int'-Größe aufzubohen. Und ich denke Du kannst davon ausgehen, dass die Hashfunktion von Ganzzahlwerten auch nichts weiter machen wird, außer eventuell die Verteilung zu verbessern (falls die Funktion annahmen über die Eingabeverteilung treffen kann, was ja bei Speicherbereichen z.B. durchaus der Fall sein könnte).</p>
<p>Langer Rede kurzer Sinn: Eine Hashtabelle ergibt auch für Ganzzahlwerte bzw. &quot;kleine&quot; Datenstrukturen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246513</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 16 Mar 2007 09:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 10:07:20 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>wenn ich auf was schnell zugreifen will, brauch ich den Key (hash) soweiso in sortierter folge, anders gehts ned, also irgendwas wird jeder container mit O(n) = log n sortiert ablegen.</p>
</blockquote>
<p>Nach meinen verständnis ist das in einer hash map eben nicht so. klar im schlechtesten fall nicht, aber es wird ja nicht nach einen freien platz gesucht sondern dieser anhand der hashfunktion berechnet erst dann wird ggf gesucht, oder bei einer hashmap mit linked list hinten an die liste dran gehangen. Somit ist bei guter hash funktion die Zugriffszeit im mittel O(1) im normalfall muss er in der map nichts suchen sondern weiß genau. Der Schlüssel &quot;1234&quot; steht an stelle 1234 nur wenn er dort nicht ist wird dann nun gesucht. Also ist ein Hash map im grunde nicht geordnet sondern fest vorgelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246526</guid><dc:creator><![CDATA[Fedaykin@FH]]></dc:creator><pubDate>Fri, 16 Mar 2007 10:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 10:25:51 GMT]]></title><description><![CDATA[<p>RHBaum, ein Hashtable hat die Keys NICHT sortiert.</p>
<p><a href="http://en.wikipedia.org/wiki/Hash_table" rel="nofollow">http://en.wikipedia.org/wiki/Hash_table</a></p>
<p>Grundlegendste Grundlagen der Informatik. Datenstrukturen, Alter <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/1246537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246537</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 16 Mar 2007 10:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 10:59:28 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>RHBaum, ein Hashtable hat die Keys NICHT sortiert.</p>
<p><a href="http://en.wikipedia.org/wiki/Hash_table" rel="nofollow">http://en.wikipedia.org/wiki/Hash_table</a></p>
<p>Grundlegendste Grundlagen der Informatik. Datenstrukturen, Alter <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>Hehe, das sollte einem spätestens klar werden, wenn man den Begriff unordered_map liest. <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/1246560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246560</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 16 Mar 2007 10:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 14:22:50 GMT]]></title><description><![CDATA[<blockquote>
<p>RHBaum, ein Hashtable hat die Keys NICHT sortiert.</p>
</blockquote>
<p>aber dafuer der hash, der ja quasi die sortierung ist. Ich meint nur ohne ne sortierung geht gar nix ....</p>
<p>Also in der praxis hab ichs noch nie gebraucht, nen normaler baum war immer schnell genug, bei 32bit IDs.<br />
Ob die Hashmap wirklich performanter waer haengt ja dann auch stark von der verteilung und der Menge der ID's ab ...</p>
<p>wie gesagt in meinem Buch ueber Algos steht das Hashes sich erst bei groesseren Structuren lohnen ... bei kleineren waeren Tree's meist effizenter.</p>
<blockquote>
<p>Denn das würde ja bedeuten, dass Du eine Hash-Tabelle von der Größe 32 Bit brauchst -- also mit 2^32 Feldern.</p>
</blockquote>
<p>So meint ich das ned ... Ich meint er hat eh ne 32bit als ID, da sollten die lookups im Baum effizient genug sein.<br />
Ich kenn hashes nur aus der DB Welt, und da entschiedet die art des hashes, wie das zeugs arrangiert wird. Das kann nen fest positioniertes array sein, aber auch nen Baum, der auf den hashwert matcht. Wusst ned das bei ner hashmap bei datenstrukturen immer das positionierte array gemeint ist ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246745</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 16 Mar 2007 14:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 16:00:56 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<blockquote>
<p>RHBaum, ein Hashtable hat die Keys NICHT sortiert.</p>
</blockquote>
<p>aber dafuer der hash, der ja quasi die sortierung ist. Ich meint nur ohne ne sortierung geht gar nix ....</p>
</blockquote>
<p>Vielleicht solltest du dir das Kapitel Hashtabelle noch einmal genauer anschauen. :p<br />
Das einzige was &quot;sortiert&quot; ist, ist der Index.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246804</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 16 Mar 2007 16:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 18:49:06 GMT]]></title><description><![CDATA[<p>also was ich wann verwende ist halt sache,</p>
<p>map, etc die man in O(log n) durchsucht wenn es mehr darauf ankommt elemente geordnet zu halten, und es viele elemente werden könnten hash map wenn ich wirklich sehr schnellen zugriff brauche aber die anzahl moderat genug das sich der mehraufwand an speicher auch lohnt den man verbraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246905</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Fri, 16 Mar 2007 18:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Fri, 16 Mar 2007 19:50:12 GMT]]></title><description><![CDATA[<p>RHBaum, der Hash ist nicht sortiert, der &quot;ist&quot; einfach. Weiters wird er (meist per Modulodivision) auf [0-N) runtergebrochen (wobei N die Grösse des Tables ist), wodurch die Ordnung des Hash (die ja schonmal nix mit der Ordnung der Keys zu tun hat) erst zerstört wird. Allgemein kann man sagen dass die Einträge (bzw. Zeiger auf die Einträge) in keiner verwendbaren Ordnung im Hashtable liegen -- nur die Position eines einzelnen Eintrages eignet sich zum schnellen Auffinden.</p>
<p>Weiters muss im Idealfall (und auch im Normalfall, wenn man es richtig implementiert) nicht ein Baum mit 3, 4, 5... Ebenen durchwandert werden, sondern der erste bzw. spätestens zweite Table-Lookup ist meist ein Treffer.</p>
<p>Ob bzw. um wieviel ein Hashtable schneller ist als z.B. ein RB-Tree hängt dann auch noch stark davon ab wie teuer der Vergleich 2er Keys ist. Hat man z.B. Strings als Keys (wo vielleicht vorne noch ein Namespace-Teil dranhängt, so dass viele Strings sich erst weit hinten unterscheiden) dann ist ein Hashtable auch bei ganz wenigen Elementen schon oft deutlich schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246936</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 16 Mar 2007 19:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 07:41:02 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ob bzw. um wieviel ein Hashtable schneller ist als z.B. ein RB-Tree hängt dann auch noch stark davon ab wie teuer der Vergleich 2er Keys ist. Hat man z.B. Strings als Keys (wo vielleicht vorne noch ein Namespace-Teil dranhängt, so dass viele Strings sich erst weit hinten unterscheiden) dann ist ein Hashtable auch bei ganz wenigen Elementen schon oft deutlich schneller.</p>
</blockquote>
<p>Das versteh ich nicht, in beiden fällen muss ich vergleichen. Und auch das gleiche. Wo soll man nun bei den vergleichen unterschiede machen? Solange ich schlüssel nicht nur aufgrund ihrer Struktur vergleiche dauert es gleich lang.</p>
<p>Es bleibt halt nur noch das problem, wende ich divide and conquer an, so das ein O(log n) zugriff habe. Oder halt so ein zugriffsverfahren wie bei der hashmap wo ich im grunde direkt in eine zelle greife in der ich vermute das dort das element steht. Aber ich muss im endeffekt immer die beiden schlussel vergleichen.</p>
<p>Aber nochmal zum eigentlichen problem zurück. Bei der sturktur die gespeichert werden soll eignet sich auch ein trie hervorragend. <a href="http://en.wikipedia.org/wiki/Trie" rel="nofollow">http://en.wikipedia.org/wiki/Trie</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247092</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Sat, 17 Mar 2007 07:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 11:53:41 GMT]]></title><description><![CDATA[<p>Also erstmal vielen Dank für die interessante Diskussion, die Kompetenz dieses Forums überrascht mich positiv.<br />
Hab nun ein unordered_set und eine Hashfunktion, die einfach die ID zurückgibt, und das klappt gut.<br />
Hab aber noch eine Frage, wird bei einer Hashmap (unordered_map) der Key gehasht oder die Values? Und wenn ja, wie könnte eine gute Hashfunktion für strings aussehen?</p>
<p>Fedaykin schrieb:</p>
<blockquote>
<p>Aber nochmal zum eigentlichen problem zurück. Bei der sturktur die gespeichert werden soll eignet sich auch ein trie hervorragend. <a href="http://en.wikipedia.org/wiki/Trie" rel="nofollow">http://en.wikipedia.org/wiki/Trie</a></p>
</blockquote>
<p>Gibt es für diese Datenstruktur gute Implementationen die man verwenden könnte?</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247160</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Sat, 17 Mar 2007 11:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 12:14:50 GMT]]></title><description><![CDATA[<p>Eldoran schrieb:</p>
<blockquote>
<p>Hab aber noch eine Frage, wird bei einer Hashmap (unordered_map) der Key gehasht oder die Values?</p>
</blockquote>
<p>Der Schlüssel.</p>
<blockquote>
<p>Und wenn ja, wie könnte eine gute Hashfunktion für strings aussehen?</p>
</blockquote>
<p>Oha. Das ist eine Wissenschaft für sich, siehe <a href="http://en.wikipedia.org/wiki/Hash_table" rel="nofollow">http://en.wikipedia.org/wiki/Hash_table</a>. Dort ist auch eine recht gute Funktion genannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247173</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 17 Mar 2007 12:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 13:56:02 GMT]]></title><description><![CDATA[<p>Hm, das trau ich mir jetzt nicht zu, ne eigene Wissenschaft zu betreten.</p>
<p>Kennt jemand die hash&lt;&gt; struct ausm tr1? --&gt; <a href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/structstd_1_1tr1_1_1hash_3_01__Tp_01_5_01_4.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/structstd_1_1tr1_1_1hash_3_01__Tp_01_5_01_4.html</a></p>
<p>Ist die ordentlich implementiert für std::strings?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247233</guid><dc:creator><![CDATA[Eldoran]]></dc:creator><pubDate>Sat, 17 Mar 2007 13:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 14:02:08 GMT]]></title><description><![CDATA[<p>Eldoran schrieb:</p>
<blockquote>
<p>Kennt jemand die hash&lt;&gt; struct ausm tr1?<br />
Ist die ordentlich implementiert für std::strings?</p>
</blockquote>
<p>Ich gehe davon aus (auch wenn ich die Implementierung nicht kenne).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247240</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 17 Mar 2007 14:02:08 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 15:30:06 GMT]]></title><description><![CDATA[<p>Fedaykin schrieb:</p>
<blockquote>
<p>Das versteh ich nicht, in beiden fällen muss ich vergleichen. Und auch das gleiche. Wo soll man nun bei den vergleichen unterschiede machen?</p>
</blockquote>
<p>Was ist daran nicht zu verstehen? Bei der Hashmap musst du erwartungsgemäß nur einmal, zweimal vergleichen, beim Baum hast du einen Vergleich pro Knoten im Pfad.</p>
<p>Je nachdem wie teuer Schlüsselvergleich und Hashfunktion sind, lohnt sich eine Hashmap dann auch schon bei kleineren Mengen.</p>
<p>Fedaykin schrieb:</p>
<blockquote>
<p>Solange ich schlüssel nicht nur aufgrund ihrer Struktur vergleiche dauert es gleich lang.</p>
</blockquote>
<p>Huh?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247298</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 17 Mar 2007 15:30:06 GMT</pubDate></item><item><title><![CDATA[Reply to set oder map? on Sat, 17 Mar 2007 17:33:01 GMT]]></title><description><![CDATA[<p>ok.... nun hab ich wohl was verwechselt ich dachte du meintest irgendwie das die vergleiche unterschiedlich aufwendig wären. Also ein vergleich in einer hashmap langsamer wäre als ein vergleich in einer map.</p>
<p>Zum thema strukturvergleich. Damit ist es z.B. möglich sortieralgorithmen die ein O(n) hab zu schreiben, aber das ganze ist im grunde ein fake da es ein O(n*m) ist wobei m von 0 bis x geht. Das heißt es kann sehr schnell sein als auch sehr langsam da ich halt die struktur analsiere ich vergleiche nicht zwei werte sondern z.B. bei zahlen zuerst die 0, dann die 10, dann die 100er stelle etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247383</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Sat, 17 Mar 2007 17:33:01 GMT</pubDate></item></channel></rss>