<?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[hash_map]]></title><description><![CDATA[<p>Abend,</p>
<p>Ich brauche folgende Struktur: Ich habe Knoten (Node*) und jeder davon hat einen eindeutigen Namen (string); es kann also niemals 2 Node mit dem gleichen Namen geben. Über den Namen möchte ich dann auf den Node* zugreifen. Zusätzlich soll über einen Index auf die Node* zugegriffen werden. Also wenn ich in die Struktur 2 Node hinzufüge (zb. &quot;Knoten1&quot; =&gt; Node*, &quot;EinAndererKnoten&quot; =&gt; Node*), dann soll Index 0 den &quot;Knoden1&quot; liefern und Index 1 den Knoten &quot;EinAndererKnoten&quot;.</p>
<p>Ich dachte zunächst an std::map, aber ich glaube std::map sortiert und das würde ja meinen Index-Zugriff unmöglich machen, oder?</p>
<p>Also habe ich mir stdext::hash_map angeschaut (ich benutze VS 2008) und einen kleinen Test geschrieben:</p>
<pre><code class="language-cpp">stdext::hash_map&lt;std::string, int&gt; hm;

	hm[&quot;B&quot;] = 2;
	hm[&quot;Z&quot;] = 33;
	hm[&quot;A&quot;] = -2;
	hm[&quot;AKEKFE&quot;] = 4923;

	stdext::hash_map&lt;std::string, int&gt;::iterator it = hm.begin();

	for(; it != hm.end(); ++it) {
		std::string s = it-&gt;first;
		int j = it-&gt;second;
	}
</code></pre>
<p>Da gibt es nun 2 Dinge, die ich nicht verstehe:<br />
1. Im Debugger wird mir folgender Inhalt von hm angezeigt:</p>
<blockquote>
<p>[4]((&quot;A&quot;,-2),(&quot;B&quot;,2),(&quot;Z&quot;,33),(&quot;AKEKFE&quot;,4923))</p>
</blockquote>
<p>Wieso ist das hier sortiert? Ich dachte hash_map sortiert nicht?</p>
<p>2. Wenn ich den Code ausführe, hat s in der Schleife folgende Werte:<br />
&quot;B&quot;, &quot;Z&quot;, &quot;AKEKFE&quot;.<br />
Das raff ich nicht. Offenbar sind die Werte also doch unsortiert. Wieso zeigt der Debugger sie dann sortiert an? Und wieso ist &quot;A&quot; verschwunden?</p>
<p>Ist stdext::hash_map bei meinem Problem überhaupt die richtige Struktur?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247943/hash_map</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 08:59:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247943.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Aug 2009 17:42:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to hash_map on Mon, 17 Aug 2009 17:42:35 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>Ich brauche folgende Struktur: Ich habe Knoten (Node*) und jeder davon hat einen eindeutigen Namen (string); es kann also niemals 2 Node mit dem gleichen Namen geben. Über den Namen möchte ich dann auf den Node* zugreifen. Zusätzlich soll über einen Index auf die Node* zugegriffen werden. Also wenn ich in die Struktur 2 Node hinzufüge (zb. &quot;Knoten1&quot; =&gt; Node*, &quot;EinAndererKnoten&quot; =&gt; Node*), dann soll Index 0 den &quot;Knoden1&quot; liefern und Index 1 den Knoten &quot;EinAndererKnoten&quot;.</p>
<p>Ich dachte zunächst an std::map, aber ich glaube std::map sortiert und das würde ja meinen Index-Zugriff unmöglich machen, oder?</p>
<p>Also habe ich mir stdext::hash_map angeschaut (ich benutze VS 2008) und einen kleinen Test geschrieben:</p>
<pre><code class="language-cpp">stdext::hash_map&lt;std::string, int&gt; hm;

	hm[&quot;B&quot;] = 2;
	hm[&quot;Z&quot;] = 33;
	hm[&quot;A&quot;] = -2;
	hm[&quot;AKEKFE&quot;] = 4923;

	stdext::hash_map&lt;std::string, int&gt;::iterator it = hm.begin();

	for(; it != hm.end(); ++it) {
		std::string s = it-&gt;first;
		int j = it-&gt;second;
	}
</code></pre>
<p>Da gibt es nun 2 Dinge, die ich nicht verstehe:<br />
1. Im Debugger wird mir folgender Inhalt von hm angezeigt:</p>
<blockquote>
<p>[4]((&quot;A&quot;,-2),(&quot;B&quot;,2),(&quot;Z&quot;,33),(&quot;AKEKFE&quot;,4923))</p>
</blockquote>
<p>Wieso ist das hier sortiert? Ich dachte hash_map sortiert nicht?</p>
<p>2. Wenn ich den Code ausführe, hat s in der Schleife folgende Werte:<br />
&quot;B&quot;, &quot;Z&quot;, &quot;AKEKFE&quot;.<br />
Das raff ich nicht. Offenbar sind die Werte also doch unsortiert. Wieso zeigt der Debugger sie dann sortiert an? Und wieso ist &quot;A&quot; verschwunden?</p>
<p>Ist stdext::hash_map bei meinem Problem überhaupt die richtige Struktur?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762513</guid><dc:creator><![CDATA[mapper]]></dc:creator><pubDate>Mon, 17 Aug 2009 17:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to hash_map on Mon, 17 Aug 2009 17:49:32 GMT]]></title><description><![CDATA[<p>Die Ansicht im Debugger sagt doch nichts darüber aus ob die Einträge sortiert sind, schon gar nicht bei 4 Einträgen.</p>
<p>Allerdings verstehe ich nicht was dir die Hashtabelle bei deinem Problem nützt, du willst doch offensichtlich zwei Zuordnungen: Index |--&gt; Node und Name |--&gt; Node. Das einfachste hierfür wäre zwei std::maps zu nehmen, einmal std::map&lt;int, Node*&gt; und einmal std::map&lt;std::string, Node*&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762518</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Mon, 17 Aug 2009 17:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to hash_map on Mon, 17 Aug 2009 17:51:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso ist das hier sortiert? Ich dachte hash_map sortiert nicht?</p>
</blockquote>
<p>Sicher tut sie es das. Nur nicht nach einer normalen Sortierordnung.</p>
<p>Schau dir mal den Artikel an, dann verstehst du es: <a href="http://en.wikipedia.org/wiki/Hash_table" rel="nofollow">http://en.wikipedia.org/wiki/Hash_table</a></p>
<p>Die Lösung deines Problems ist, dass du 2 Container brauchst. Der erste speichert die Elemente in einem Vektor (für Indexzugriff), und dazu eine Map, die zu jedem string den passenden Index im vector speichert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762522</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 17 Aug 2009 17:51:53 GMT</pubDate></item></channel></rss>