<?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[Referenz auf eine std::map ? [gelöst]]]></title><description><![CDATA[<p>Hallo,</p>
<p>bei einer Berechnung möchte ich gerne per Referenz auf eine map zugreifen um gleichzeitig die Werte ändern zu können. Jetzt bin ich mir aber nicht sicher ob ich jedes mal im Speicher eine map anlege und die irgendwie da hängen bleibt.</p>
<p>Kann ich das wie folgt machen oder Mülle ich damit den Speiche zu?</p>
<pre><code class="language-cpp">void Analysis::calculate(Gradient* curve) const
{
	map&lt;string,float&gt;&amp; data = *(new map&lt;string, float&gt;);

	switch(curve-&gt;getType())
	{
	case 1:
		data = curve-&gt;maxValues;
		break;
	case 2:
		data = curve-&gt;minValues;
		break;
		//....
	}

	// Berechnung mit data
	// ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/266956/referenz-auf-eine-std-map-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 15:48:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266956.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 May 2010 08:29:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Wed, 19 May 2010 11:09:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bei einer Berechnung möchte ich gerne per Referenz auf eine map zugreifen um gleichzeitig die Werte ändern zu können. Jetzt bin ich mir aber nicht sicher ob ich jedes mal im Speicher eine map anlege und die irgendwie da hängen bleibt.</p>
<p>Kann ich das wie folgt machen oder Mülle ich damit den Speiche zu?</p>
<pre><code class="language-cpp">void Analysis::calculate(Gradient* curve) const
{
	map&lt;string,float&gt;&amp; data = *(new map&lt;string, float&gt;);

	switch(curve-&gt;getType())
	{
	case 1:
		data = curve-&gt;maxValues;
		break;
	case 2:
		data = curve-&gt;minValues;
		break;
		//....
	}

	// Berechnung mit data
	// ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1898258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898258</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Wed, 19 May 2010 11:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Mon, 17 May 2010 08:40:46 GMT]]></title><description><![CDATA[<p>Sharpie schrieb:</p>
<blockquote>
<pre><code class="language-cpp">map&lt;string,float&gt;&amp; data = *(new map&lt;string, float&gt;);
</code></pre>
</blockquote>
<p>Ergibt irgendwie nicht so richtig Sinn. Wenn du keine Referenz hast, dann erstell eben lokal eine neue Map, und nicht wie hier auf dem Heap. Wenn du dann noch vergisst die Map mit delete zu löschen, dann hast du ein schönes Speicherleck.</p>
<pre><code class="language-cpp">map&lt;string,float&gt; data;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1898264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898264</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Mon, 17 May 2010 08:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Mon, 17 May 2010 08:41:02 GMT]]></title><description><![CDATA[<p>Du legst hier eine Map auf dem Heap an und lässt die Referenz data auf diese verweisen. Das produziert natürlich ein Speicherleck (jedenfalls sehe ich in diesem Codeabschnitt kein delete).</p>
<p>Dann, im switch-Block, <strong>kopierst</strong> Du eine Map aus dem curve-Objekt in diese Map, die Du zuvor angelegt hast. Wenn Du später an data Änderungen vornimmst, ändert sich die Map in dem curve-Objekt also <strong>nicht</strong>.</p>
<p>Merke: Referenzen können nach ihrer erstmaligen Initialisierungen nicht mehr umgebogen werden! Wenn Du sowas hier machen möchtest, nimm einen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898265</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 17 May 2010 08:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Mon, 17 May 2010 10:57:51 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
<p>Also eine neue Map würde ich nur ungern erstellen, da ich diese anschließend wieder in das curve-Objekt zurück schreiben muss um die Änderungen zu speichern. In diesem Fall würde mir ein Zeiger auf das curve-Objekt bzw. die Map besser gefallen.</p>
<p>Wie bekomme ich aber einen entsprechenden Zeiger auf die Map im curve-Objekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898307</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Mon, 17 May 2010 10:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Mon, 17 May 2010 11:44:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">map&lt;string,float&gt; *myMap = &amp;curve-&gt;curveMap;
curve-&gt;curveMap = *myMap;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1898331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898331</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Mon, 17 May 2010 11:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Tue, 18 May 2010 12:31:37 GMT]]></title><description><![CDATA[<blockquote>
<pre><code>map&lt;string,float&gt; *myMap = &amp;curve-&gt;curveMap;
curve-&gt;curveMap = *myMap;
</code></pre>
</blockquote>
<p>Danke für das Beispiel, aber ich habe noch ein kleines Verständnis Problem. Für was ist das notwendig:</p>
<pre><code>curve-&gt;curveMap = *myMap;
</code></pre>
<p>Ich ändere dann über myMap doch direkt die Werte in curve-&gt;curveMap, oder? Zumindest zeigt mir das mein Debugger auch so an!</p>
<p>Warum kann ich aber nur so über den Key an den Wert kommen:</p>
<pre><code class="language-cpp">myMap[0][&quot;ID&quot;];
</code></pre>
<p>und nicht über</p>
<pre><code class="language-cpp">myMap[&quot;ID&quot;];
</code></pre>
<p>ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898962</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Tue, 18 May 2010 12:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Tue, 18 May 2010 19:10:03 GMT]]></title><description><![CDATA[<p>Überleg mal, was myMap für ein Typ hat. Es ist <strong>keine</strong> map! (sondern ein Zeiger auf eine)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899233</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 18 May 2010 19:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Wed, 19 May 2010 08:29:09 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Überleg mal, was myMap für ein Typ hat. Es ist <strong>keine</strong> map! (sondern ein Zeiger auf eine)</p>
</blockquote>
<p>Ja ist mir auch klar, dass myMap ein Zeiger auf eine map ist. Deshalb müsste auch *myMap[&quot;ID&quot;] funktionieren oder? Es sollte doch dem entsprechen:</p>
<pre><code class="language-cpp">int *a, b;
b = 17;
a = &amp;b;
</code></pre>
<p>Dann greife ich doch mit *a auf den Inhalt der Variable zu. Demzufolge sollte doch auch *myMap[&quot;ID&quot;] möglich sein oder? Deutet jeder Zeiger dann auf ein Array da ich mit myMap[0][&quot;ID&quot;] zugriff habe und in diesem Fall wäre nur ein Feld belegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899392</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Wed, 19 May 2010 08:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Wed, 19 May 2010 08:40:09 GMT]]></title><description><![CDATA[<p>Sharpie schrieb:</p>
<blockquote>
<p>Deshalb müsste auch *myMap[&quot;ID&quot;] funktionieren oder?</p>
</blockquote>
<p>Die Idee ist vollkommen korrekt, allerdings bindet der []-Operator stärker als der *-Operator. Somit muss man <code>(*myMap)[&quot;ID&quot;]</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899395</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 19 May 2010 08:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Wed, 19 May 2010 08:41:05 GMT]]></title><description><![CDATA[<p>Sharpie schrieb:</p>
<blockquote>
<p>Demzufolge sollte doch auch *myMap[&quot;ID&quot;] möglich sein oder?</p>
</blockquote>
<p>Nein. Die operator-Rangfolge ist andersrum. Was du da schreibst ist <code>*(myMap[&quot;ID&quot;])</code> und nicht <code>(*myMap)[&quot;ID&quot;]</code></p>
<p>Sharpie schrieb:</p>
<blockquote>
<p>Deutet jeder Zeiger dann auf ein Array da ich mit myMap[0][&quot;ID&quot;] zugriff habe und in diesem Fall wäre nur ein Feld belegt?</p>
</blockquote>
<p>Bei einem Zeiger bedeutet <code>ptr[n]</code> das selbe wie <code>*(ptr + n)</code> , in deinem Fall also <code>(*myMap)[&quot;ID&quot;]</code> - was zufälligerweise das ist was du willst.<br />
Zufälligerweise deshalb, weil es nicht den Anschein macht als hättest du die Hintergründe verstanden und wüsstest genau warum es so funktioniert wie es funktioniert. Ich rate daher, dich einmal genauer mit Pointersemantik und mit der Operator-Rangfolge zu beschäftigen. (Wenn man sich mit der nicht genau auskennt, ist es nicht so schlimm, nur sollte man dann sicherheitshalber Klammern setzen bevor man Ausdrücke fabriziert die keinen Sinn ergeben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899396</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 19 May 2010 08:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf eine std::map ? [gelöst] on Wed, 19 May 2010 11:09:01 GMT]]></title><description><![CDATA[<p>Vielen Dank an alle für die tolle Hilfe. Habe jetzt so weit alles verstanden und für den Rest habe ich ja noch ein paar Bücher <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/1899456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899456</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Wed, 19 May 2010 11:09:01 GMT</pubDate></item></channel></rss>