<?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[Sammeldatentyp wie HashMap in Java ?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich fange gerade mit C++ an und weiß leider nicht mehr weiter.</p>
<p>Ich brauche ein dynamisches Konstrukt, in dem ich mehrere Objekte abspeichern kann. Also kein festes Array. Eine Liste möchte ich auch vermeiden.</p>
<p>In Java hätte ich es mit einer HashMap gemacht.</p>
<p>Gibt es in C++ ein Datentyp, mit dem ich ungefähr (wenn nicht genau das selbe) machen kann?</p>
<p>Ich bin für jeden Rat dankbar! <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/284932/sammeldatentyp-wie-hashmap-in-java</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:27:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284932.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Apr 2011 14:41:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 14:41:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich fange gerade mit C++ an und weiß leider nicht mehr weiter.</p>
<p>Ich brauche ein dynamisches Konstrukt, in dem ich mehrere Objekte abspeichern kann. Also kein festes Array. Eine Liste möchte ich auch vermeiden.</p>
<p>In Java hätte ich es mit einer HashMap gemacht.</p>
<p>Gibt es in C++ ein Datentyp, mit dem ich ungefähr (wenn nicht genau das selbe) machen kann?</p>
<p>Ich bin für jeden Rat dankbar! <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/2047559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047559</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Mon, 11 Apr 2011 14:41:48 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 14:43:45 GMT]]></title><description><![CDATA[<p>Ach ja, noch eine kleine Nachfrage.</p>
<p>In C++ gibt es standardmäßig scheinbar nur die primitiven Datentypen + dem String. Oder gibt es eine Kollektion, von ungefähr dem gleichen Umfang, wie er in Java existiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047560</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Mon, 11 Apr 2011 14:43:45 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 14:51:55 GMT]]></title><description><![CDATA[<p><a href="http://www.cppreference.com/wiki/" rel="nofollow">http://www.cppreference.com/wiki/</a></p>
<p><a href="http://www.cplusplus.com/" rel="nofollow">http://www.cplusplus.com/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047563</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Mon, 11 Apr 2011 14:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 14:53:36 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>In C++ gibt es standardmäßig scheinbar nur die primitiven Datentypen + dem String.</p>
</blockquote>
<p>Welchen String meinst du? C-Strings, d.h. char-Arrays? Oder std::string? Wenn du letzteren kennst, wundert es mich, dass du die zig anderen Typen der Standardbibliothek nicht kennst.<br />
An Containern gibts z.B. std::vector, std::list, std::set, std::map, std::deque. Zumindest vector sollte im C++ Einsteigerbuch deiner Wahl behandelt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047564</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Apr 2011 14:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 15:09:33 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Ich brauche ein dynamisches Konstrukt, in dem ich mehrere Objekte abspeichern kann. Also kein festes Array. Eine Liste möchte ich auch vermeiden.</p>
<p>In Java hätte ich es mit einer HashMap gemacht.</p>
</blockquote>
<p>Eine Hash-Map ist schon eine recht spezielle Anforderung. Weit mehr als nur &quot;mehrere Objekte abspeichern&quot;. Falls du das wirklich benötigst, kannst du dir z.B. <code>std::tr1::unordered_map</code> anschauen. Allerdings denke ich, du suchst nach anderen STL-Containern, dann könntest du dir für den Einstieg <a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%201%3A%20Container" rel="nofollow">diesen Artikel</a> anschauen. Aber ein gutes C++-Buch brauchst du nebenbei sowieso, hast du das? Z.B. den C++-Primer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047569</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 Apr 2011 15:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 15:48:51 GMT]]></title><description><![CDATA[<p>Danke für die vielen Antworten! Es ist leider schon länger her, als ich ein C++ Buch gelesen habe.<br />
Ich habe leider keine Zeit um ein komplettes Buch zu lesen, sondern benötige nur 2-3 Datentypen.</p>
<p>Also es geht um folgendes:</p>
<p>Ich habe einen Haufen an Zuständen (z.B. Koordinaten), diese möchte ich einfach nur irgendwo unsortiert abspeichern. Die Anzahl ist nicht fest und wird mit der Zeit größer. Also wäre ein Container günstig.<br />
Weiterhin habe ich eine Zahl an Aktionen. Die Anzahl ist an sich fest, aber diese würde ich auch gern wie die Zustände abspeichern.</p>
<p>Und nun kommt das größte Problem. Aus einem Zustand + Aktion folgt eine Bewertung. Also muss ich alle Zustände + alle Aktionen + alle Bewertungen ebenso irgendwo abspeichern.<br />
In Java hätte ich das mit einer HashMap gemacht: Zustand x Aktion -&gt; Bewertung<br />
oder ich hätte einfach Zustand x Aktion x Bewertung irgendwo abgespeichert.<br />
Wie man das in C++ macht weiß ich leider nicht.</p>
<p>Was wäre für die beiden Fälle denn am günstigsten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047590</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Mon, 11 Apr 2011 15:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 16:07:03 GMT]]></title><description><![CDATA[<p>Das kannst du in C++ genauso machen, dazu verwendet man z.B. eine std::map&lt;std::pair&lt;Zustand,Aktion&gt;,Bewertung&gt; (oder entsprechend die std::tr1::unordered_map&lt;&gt;) - das heißt eine Map, die ein Zustand/Aktion-Paar als Schlüssel verwendet.</p>
<p>Für die Aktionen und Zustände wäre je nach Verwendungszweck ein std::vector&lt;&gt;, std::list&lt;&gt; oder std::set&lt;&gt; geeignet (bei den TR1-Containern kenne ich mich nicht so aus, aber afaik gibt es da auch einen mit fest vorgegebener Größe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047600</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Apr 2011 16:07:03 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Mon, 11 Apr 2011 16:10:14 GMT]]></title><description><![CDATA[<p>Gibt eigentlich viele Lösungen. Eine Idee wäre, je nachdem wie du Zustände, Aktionen und Bewertungen konstuierst:</p>
<pre><code class="language-cpp">class Aktion {
std::map&lt;Zustand, Bewertung&gt; bewertungen;
public:
Bewertung getBewertung(Zustand) 
{ 
return bewertungen[Zustand]; 
}
</code></pre>
<p>(benötigt operator&lt; für Zustand)</p>
<p>Mit boost und tr1 gibts soweit ich gesehen habe tupel, also ginge sowas wie</p>
<pre><code class="language-cpp">vector&lt;tr1::tuple&lt;Zustand, Aktion, Bewertung&gt;
</code></pre>
<p>(ka ob der container wirklich &quot;tuple&quot; heißt)<br />
Aleternativ kannst dir ein 3-tupel als template oder auch direkt selbst schreiben z.B. mit</p>
<pre><code class="language-cpp">pair&lt;pair&lt;Zustand, Aktion&gt;, Bewertung&gt;
</code></pre>
<p>Dann gibt's noch map&lt;pair&lt;Zustand, Aktion&gt;, Bewertung&gt;, dafür musst du dir aber für pair&lt;Zustand, Aktion&gt; auch einen operator&lt; überlegen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047604</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Mon, 11 Apr 2011 16:10:14 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 14:48:50 GMT]]></title><description><![CDATA[<p>Danke bis hierhin für die bisherigen Antworten!<br />
Das hat so weit prima geklappt. <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>Allerdings habe ich ein weiteres Problem:<br />
Um Speicherplatz zu sparen, wollte ich so etwas machen:</p>
<pre><code>vector&lt;Zustand&gt; zustaende;
vector&lt;Aktion&gt; aktionen;
map&lt;pair&lt;Zustand*,Aktion*&gt;,int&gt; bewertung;
</code></pre>
<p>Also in der map sollen Pointer auf die Zustaende und Aktionen sein.</p>
<p>Das Problem ist aber, sobald ich den Vektoren neue Objekte hinzufüge, dann stimmen die Pointer in der map nicht mehr.</p>
<p>Was kann ich da tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049900</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Fri, 15 Apr 2011 14:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 14:56:28 GMT]]></title><description><![CDATA[<p>Was für Anforderungen hast du denn an das Zugriffsverhalten und die Elementreihenfolge dieser Vektoren? Wenn du nur am Ende der Vektoren einfügen willst, kannst du mit reserve() genug Platz vorbelegen, damit er nicht im laufenden Betrieb Speicher nachfordern muß. Andernfalls müsstest du einen Container verwenden, der seine Elemente nicht umkopiert (z.B. std::list).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049904</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Apr 2011 14:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 14:57:43 GMT]]></title><description><![CDATA[<p>In einer <code>std::deque</code> sollten Zeiger auf Elemente nach einem Vergrössern auch gültig bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049905</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 15 Apr 2011 14:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 14:59:19 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Allerdings habe ich ein weiteres Problem:<br />
Um Speicherplatz zu sparen, wollte ich so etwas machen:</p>
</blockquote>
<p>Und prompt schießt du dir mit Optimierungen in das eigene Bein...</p>
<p>Ein vector ist ein Zusammenhängender Speicherbereich. Was bedeutet, das wenn er vergrößert wird, er in einen neuen Bereich umkopiert wird (in der Regel wird dabei in etwa die Kapazität verdoppelt).</p>
<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Was kann ich da tun?</p>
</blockquote>
<p>Entweder prüftst du erst aus, ob du wirklich ein Speicherproblem bekommst, und verzichtest auf Zeiger, oder du nimmst einen Container, auf dem sich die Positionen nicht ändern (z.B. list).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049907</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 15 Apr 2011 14:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 20:48:47 GMT]]></title><description><![CDATA[<p>Ich habe es noch einmal mit list versucht und es scheint prima zu funktionieren. Danke für die Hilfe. <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="🙂"
    /> Allerdings habe ich bislang nur eine begrenzte Zahl an Testelementen ausprobiert.<br />
Ändern sich die Speicherplätze in list nie oder eventuell doch unter speziellen Umständen? (Bevor ich mir alle Mühe umsonst mache)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050013</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Fri, 15 Apr 2011 20:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Fri, 15 Apr 2011 21:01:13 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Ändern sich die Speicherplätze in list nie oder eventuell doch unter speziellen Umständen? (Bevor ich mir alle Mühe umsonst mache)</p>
</blockquote>
<p>Die verändern sich höchstens, wenn du eine nicht standardkonforme Version der STL hat. std::list&lt;&gt; speichert seine Elemente in einer doppelt verketteten Liste, das hat es nicht nötig die Elemente im Speicher umzuordnen, sondern muß nur die Pointer umhängen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050015</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Apr 2011 21:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sammeldatentyp wie HashMap in Java ? on Sat, 16 Apr 2011 04:06:27 GMT]]></title><description><![CDATA[<p>Java steckt ja auch nicht die Pointer in die HashMap, sondern hash values, darum hat jedes Java Objekt eine hashCode() Methode.</p>
<p>std::map ist keine HashMap, aber die Idee kann man da auch anwenden. Einfach zustand.getId() und aktion.getId() einführen und diese Ids als keys für die Map verwenden. Die Id muss eindeutig sein, am einfachsten ein static int hochzählen, wenn du nicht multithreaded bist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050053</guid><dc:creator><![CDATA[butterBeiDieFische]]></dc:creator><pubDate>Sat, 16 Apr 2011 04:06:27 GMT</pubDate></item></channel></rss>