<?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[operator[] mit Zuweisung]]></title><description><![CDATA[<p>Hallo.<br />
Ich schreibe gerade an einer spezialisierten Arrayklasse (ähnlich wie <code>std::map</code> ). Arbeitet auch mit Iteratoren und funktioniert bisher auch wunderbar.<br />
Jedoch stellt sich mir aktuell das Problem, dass ich nicht weiß, wie ich folgende Situation lösen kann:</p>
<pre><code class="language-cpp">Array3D&lt;int, float&gt; x;
x[22] = 0.5f; // Der Key 22 existiert noch nicht
</code></pre>
<p>Wie überlade ich diese Zuweisung korrekt, und wie löse ich das Problem, auch etwas einzutragen, wenn der Key noch nicht existiert?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266376/operator-mit-zuweisung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 07:14:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266376.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 May 2010 20:30:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator[] mit Zuweisung on Fri, 07 May 2010 20:30:05 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich schreibe gerade an einer spezialisierten Arrayklasse (ähnlich wie <code>std::map</code> ). Arbeitet auch mit Iteratoren und funktioniert bisher auch wunderbar.<br />
Jedoch stellt sich mir aktuell das Problem, dass ich nicht weiß, wie ich folgende Situation lösen kann:</p>
<pre><code class="language-cpp">Array3D&lt;int, float&gt; x;
x[22] = 0.5f; // Der Key 22 existiert noch nicht
</code></pre>
<p>Wie überlade ich diese Zuweisung korrekt, und wie löse ich das Problem, auch etwas einzutragen, wenn der Key noch nicht existiert?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893995</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Fri, 07 May 2010 20:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] mit Zuweisung on Fri, 07 May 2010 20:32:41 GMT]]></title><description><![CDATA[<p>operator[] überladen:</p>
<p>valuetype&amp; operator[](KeyType kt);</p>
<p>Die Funktion muss so aufgebaut sein, dass wenn in der hinterliegenden Datenstruktur kein Element mit dem entsprechenden Key gibt, so wird eines automatisch erstellt und zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893997</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Fri, 07 May 2010 20:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] mit Zuweisung on Fri, 07 May 2010 21:05:25 GMT]]></title><description><![CDATA[<p>Hi.<br />
Stimmt. Hier erstmal mein Code:</p>
<pre><code class="language-cpp">K &amp;operator[](const T &amp;Key)
		{
			Iterator It = (*this)[Key]; // ruft den anderen operator[] auf

			if (It == this-&gt;End())
			{
				return this-&gt;Append(Key)-&gt;Value;
			}

			return It-&gt;Value;
		}
		Iterator operator[](const T &amp;Key) const
		{
			for (Iterator It = this-&gt;Begin(); It != this-&gt;End(); It++)
			{
				if (It-&gt;Key == Key)
				{
					return It;
				}
			}

			return this-&gt;End();
		}
</code></pre>
<p>Problem ist jetzt folgendes: Es wird immer der erste <code>operator[]</code> aufgerufen, auch in Situationen in denen das gar nicht passt. Ich dachte immer, der Compiler ist schlau genug um das hinzukriegen.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">Array3D&lt;int, float&gt; x;
x.Erase(x[0]); // es wird der erste operator[] aufgerufen - warum? Erase nimmt nämlich einen Iterator...
x[22] = 0.5f; // funktioniert :)
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894013</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Fri, 07 May 2010 21:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] mit Zuweisung on Fri, 07 May 2010 21:53:57 GMT]]></title><description><![CDATA[<p>Rückgabewert ist nicht von belang, da er nicht zur Funktionssignatur gehört:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1893770.html#1893770" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1893770.html#1893770</a></p>
<p>Der einzige Grund, wieso deine Überladung überhaupt funktioniert, liegt an dem <code>const</code> , denn dieses gehört zur Funktionssignatur <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894048</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 07 May 2010 21:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] mit Zuweisung on Fri, 07 May 2010 21:55:50 GMT]]></title><description><![CDATA[<p>Ok. Habe mich nun gegen den 2. operator[] entschieden und diesen in Find umbenannt.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894050</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Fri, 07 May 2010 21:55:50 GMT</pubDate></item></channel></rss>