<?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[ueberpruefen ob std::map initialisiert hat]]></title><description><![CDATA[<p>hallo,<br />
ich habe ein duennbesetztes 2D Zahlenfeld. Zu mehreren besetzten Koordinaten (etwa Koordinate (1,41) wird ein Wert gespeichert (etwa Wert 0 oder 431) ).<br />
Ich moechte aber um Speicher zu sparen einige Felder nicht initialisieren muessen.<br />
Wie ueberpruefe ich nun, ob in meinem Zahlenfeld bei einer bestimmten Koordinate bereits ein Wert gesetzt wurde?</p>
<pre><code>#include &lt;map&gt;
template &lt; typename T &gt;
class SparseMatrix {
	std::map&lt; std::pair&lt; long, long &gt;, T &gt; rep;
	public:
	void SetValue(long x, long y, T set_value) {
		rep[ std::make_pair( x, y ) ] = set_value;
	}
	T GetValue( long x, long y ) { 
		return rep[ std::make_pair( x, y ) ];
	}
	bool IsVoid( long x, long y ) const {}
}
</code></pre>
<p>Als Templateparameter habe ich double gewaehlt. Das Problem ist auch, dass ich etwa bei GetValue fuer nicht initialisierte Zahlenfelder den Wert 0 erhalte. Dies ist etwas anderes als ein initialisiertes Zahlenfeld mit Wert 0.</p>
<p>Wie muss ich isVoid programmieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207436/ueberpruefen-ob-std-map-initialisiert-hat</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 05:04:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207436.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Mar 2008 14:59:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 14:59:02 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich habe ein duennbesetztes 2D Zahlenfeld. Zu mehreren besetzten Koordinaten (etwa Koordinate (1,41) wird ein Wert gespeichert (etwa Wert 0 oder 431) ).<br />
Ich moechte aber um Speicher zu sparen einige Felder nicht initialisieren muessen.<br />
Wie ueberpruefe ich nun, ob in meinem Zahlenfeld bei einer bestimmten Koordinate bereits ein Wert gesetzt wurde?</p>
<pre><code>#include &lt;map&gt;
template &lt; typename T &gt;
class SparseMatrix {
	std::map&lt; std::pair&lt; long, long &gt;, T &gt; rep;
	public:
	void SetValue(long x, long y, T set_value) {
		rep[ std::make_pair( x, y ) ] = set_value;
	}
	T GetValue( long x, long y ) { 
		return rep[ std::make_pair( x, y ) ];
	}
	bool IsVoid( long x, long y ) const {}
}
</code></pre>
<p>Als Templateparameter habe ich double gewaehlt. Das Problem ist auch, dass ich etwa bei GetValue fuer nicht initialisierte Zahlenfelder den Wert 0 erhalte. Dies ist etwas anderes als ein initialisiertes Zahlenfeld mit Wert 0.</p>
<p>Wie muss ich isVoid programmieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470075</guid><dc:creator><![CDATA[woot]]></dc:creator><pubDate>Fri, 07 Mar 2008 14:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 15:17:03 GMT]]></title><description><![CDATA[<p>Hi,<br />
das Problem ist das wenn du bei einer map auf einen Key-Eintrag zu greifst, welcher nicht existiert, wird dort das Value-Objekt konstruiert.</p>
<pre><code class="language-cpp">std::map&lt;int, string &gt; mappi;
cout &lt;&lt; mappi[0]; // Sobald du auf ein Value zugreifen willst, das nicht existiert, wird eins angelegt, dh in mappi[0] steht nun ein leerer string
</code></pre>
<p>Um das Problem zu umgehen, prüfe in getValue mit find, ob dieser Key schon eingetragen ist, wenn ja gib das Objekt zurück und wenn nicht nen FehlerCode oder ne Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470092</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Mar 2008 15:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 15:22:11 GMT]]></title><description><![CDATA[<p>Es wäre auch vom Vorteil sein einen vector&lt; vector&lt;T&gt; &gt; zu benutzen. Dabei hast du auch deine 2D Matrix mit deinem T-Value.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470095</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Mar 2008 15:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 16:32:29 GMT]]></title><description><![CDATA[<p>Mir ist nicht klar wie ich überprüfe ob in GetValue der Eintrag existiert.</p>
<p>Also find sieht so aus:<br />
template&lt;class InputIterator, class EqualityComparable&gt;<br />
InputIterator find(InputIterator first, InputIterator last,<br />
const EqualityComparable&amp; value);</p>
<p>und ich gebe dann für die Koordinate coord bei der ich den Test mache etwas ein wie:<br />
find( coord, coord, !typeid( void ))<br />
Jedoch gibt mir dann find doch zurück:<br />
Falls noch nicht initialisiert: last, also coord.<br />
Falls ich es initialisiert habe: coord<br />
und ich habe keine Unterscheidung ob ich bereits initialisiert habe, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470142</guid><dc:creator><![CDATA[woot]]></dc:creator><pubDate>Fri, 07 Mar 2008 16:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 16:48:36 GMT]]></title><description><![CDATA[<p>Einfach einen Iterator zurück geben, und find benutzen.</p>
<pre><code class="language-cpp">map_type::iterator GetValue( long x, long y ) {
        return rep.find(std::make_pair( x, y ));
</code></pre>
<p><a href="http://cppreference.com/cppmap/find.html" rel="nofollow">http://cppreference.com/cppmap/find.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470153</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Fri, 07 Mar 2008 16:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 18:29:46 GMT]]></title><description><![CDATA[<p>danke, hat weitergeholfen <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="🙂"
    /><br />
Irgendwie meckert der bei sowas immer noch:<br />
sparse.cpp:17: error: expected ';' before 'GetValue'<br />
Aber das find ich dann am Montag.</p>
<pre><code class="language-cpp">using namespace std;
#include &lt;iostream&gt;
#include &lt;map&gt;

template &lt; typename T &gt;
class SparseMatrix{
	std::map&lt; std::pair&lt; long, long &gt;, T &gt; rep;
	public:
	void SetValue(long x, long y, T set_value) {
		rep[ std::make_pair( x, y ) ] = set_value;
	};
	std::map&lt;std::pair&lt; long, long &gt;, T &gt;::iterator GetValue( long x, long y ) {
		return rep.find(std::make_pair( x, y ));
	};
};
</code></pre>
<p>Edit: Codetags hinzugefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470200</guid><dc:creator><![CDATA[woot]]></dc:creator><pubDate>Fri, 07 Mar 2008 18:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to ueberpruefen ob std::map initialisiert hat on Fri, 07 Mar 2008 18:21:40 GMT]]></title><description><![CDATA[<p>Benutz doch bitte cpp-Tags.</p>
<p>Da fehlt ein typename. Mach Dir aber doch mal ein paar typedefs <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>
<pre><code class="language-cpp">typename std::map&lt;std::pair&lt; long, long &gt;, T &gt;::iterator GetValue( long x, long y )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1470214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470214</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 07 Mar 2008 18:21:40 GMT</pubDate></item></channel></rss>