<?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[std::map und der Gebrauch.]]></title><description><![CDATA[<p>Tach auch.<br />
Ich habe 42 Bilder die ich mit der SDL lade.<br />
Es ist aber extrem unkonfortabel, so wie ich es jetzt hab damit zu arbeiten:</p>
<pre><code class="language-cpp">SDL_Surface *i1 = IMG_Load(&quot;1.png&quot;);
// ...
SDL_Surface *i42 = IMG_Load(&quot;42.png&quot;);
</code></pre>
<p>Ich will ein int wert haben um mit den Bildern einfache vergleiche machen zu können (if(p1 &gt; p3). Außerdem hab ich da ein mouseover mit den Bildern.<br />
Ein Wert kann ich ja nicht einfach in einer schleife erhöhen und wieder abfragen.<br />
Ich müsste immer:</p>
<pre><code class="language-cpp">if(hover(i1)) { }
</code></pre>
<p>schreiben. Und das 42 mal.</p>
<p>Von daher will ich es so lösen:</p>
<pre><code class="language-cpp">std::map&lt;int zahl, SDL_Surface *fs &gt; card;
int i=1;

// alle bilder laden.
while(i &lt;= 42) {
card[wert[i&rsqb;&rsqb; = IMG_Load((wert[i] + &quot;.png&quot;).c_str());
i++;
}

// dann brauch ich nurnoch:
while(i &lt;= 42) {
if(hover(card[i]) {  // hover() erwartet als parameter die SDL_Surface
  // bild hoch
  break;
}
}
</code></pre>
<p>und alles wäre gut.<br />
Ist das eurer Meinung nach erstmal überhaupt die richtige Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255604/std-map-und-der-gebrauch</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 18:17:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255604.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Dec 2009 18:44:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map und der Gebrauch. on Wed, 02 Dec 2009 18:44:43 GMT]]></title><description><![CDATA[<p>Tach auch.<br />
Ich habe 42 Bilder die ich mit der SDL lade.<br />
Es ist aber extrem unkonfortabel, so wie ich es jetzt hab damit zu arbeiten:</p>
<pre><code class="language-cpp">SDL_Surface *i1 = IMG_Load(&quot;1.png&quot;);
// ...
SDL_Surface *i42 = IMG_Load(&quot;42.png&quot;);
</code></pre>
<p>Ich will ein int wert haben um mit den Bildern einfache vergleiche machen zu können (if(p1 &gt; p3). Außerdem hab ich da ein mouseover mit den Bildern.<br />
Ein Wert kann ich ja nicht einfach in einer schleife erhöhen und wieder abfragen.<br />
Ich müsste immer:</p>
<pre><code class="language-cpp">if(hover(i1)) { }
</code></pre>
<p>schreiben. Und das 42 mal.</p>
<p>Von daher will ich es so lösen:</p>
<pre><code class="language-cpp">std::map&lt;int zahl, SDL_Surface *fs &gt; card;
int i=1;

// alle bilder laden.
while(i &lt;= 42) {
card[wert[i&rsqb;&rsqb; = IMG_Load((wert[i] + &quot;.png&quot;).c_str());
i++;
}

// dann brauch ich nurnoch:
while(i &lt;= 42) {
if(hover(card[i]) {  // hover() erwartet als parameter die SDL_Surface
  // bild hoch
  break;
}
}
</code></pre>
<p>und alles wäre gut.<br />
Ist das eurer Meinung nach erstmal überhaupt die richtige Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816667</guid><dc:creator><![CDATA[rogr]]></dc:creator><pubDate>Wed, 02 Dec 2009 18:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Wed, 02 Dec 2009 18:51:09 GMT]]></title><description><![CDATA[<p>Wenn die Bilder streng durchnummeriert sind, wäre ein std::vector etwas einfacher zu handhaben als ne Map.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816670</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 Dec 2009 18:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Wed, 02 Dec 2009 20:07:27 GMT]]></title><description><![CDATA[<p>So?</p>
<pre><code class="language-cpp">vector&lt;SDL_Surface *fs&gt; card(int zahl)      
    {
// ...
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816701</guid><dc:creator><![CDATA[rogr]]></dc:creator><pubDate>Wed, 02 Dec 2009 20:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Wed, 02 Dec 2009 21:55:33 GMT]]></title><description><![CDATA[<p>Ne, so:</p>
<pre><code class="language-cpp">std::vector&lt;SDL_Surface*&gt; cards;

for (unsigned i = 0; i &lt; 42; ++i)
    cards.push_back(IMG_Load((wert[i] + &quot;.png&quot;).c_str()))

for (unsigned i = 0; i &lt; 42; ++i)
{
    if (hover(cards[i]))
        foo();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816771</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Wed, 02 Dec 2009 21:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 00:48:28 GMT]]></title><description><![CDATA[<p>Mal dieser Code:</p>
<pre><code class="language-cpp">void loadimg() {
    int i = 1;
    SDL_Surface *scr[i];
    // alle bilder laden.
    while(i &lt;= 1) {

        scr[i] = IMG_Load(strcat(i, &quot;.png&quot;));
     // scr[i] = IMG_Load(((char)i + &quot;.png&quot;).c_str());
        i++;
    }
}
</code></pre>
<p>Warum scheitern beide methoden?<br />
Wie mach ich das richtig?</p>
<pre><code>error: invalid conversion from `int' to `char*'|
</code></pre>
<p>bzw.</p>
<pre><code>error: request for member `c_str' in `((+((unsigned int)((char)i))) + ((const char*)&quot;.png&quot;))', which is of non-class type `const char*'|
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816852</guid><dc:creator><![CDATA[rogr]]></dc:creator><pubDate>Thu, 03 Dec 2009 00:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 06:39:56 GMT]]></title><description><![CDATA[<p>In C++ kann man mit strings nicht ganz so leicht hantieren wie in Java. &quot;.png&quot; ist vom Typ const char*, und (char)i eben vom Typ char (was übrigens nicht tut was du erwartest) - beides zusammenaddiert gibt immernoch keinen richtigen string, also kann man auch kein c_str() drauf anwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816865</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 03 Dec 2009 06:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 06:54:37 GMT]]></title><description><![CDATA[<p>hmm. Das ist doof.<br />
Wie macht man das denn richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816866</guid><dc:creator><![CDATA[rogr]]></dc:creator><pubDate>Thu, 03 Dec 2009 06:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 07:09:07 GMT]]></title><description><![CDATA[<p>Beispielsweise wäre dies eine Möglichkeit:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
	for(int i(0); i != 10; ++i) {
		std::stringstream convert; // EDIT: Hier würde auch schon ein std::ostringstream reichen
		convert &lt;&lt; i;
		std::cout &lt;&lt; convert.str().append(&quot;.png&quot;).c_str() &lt;&lt; &quot;\n&quot;; // .c_str() wäre in diesem konkretem Beispiel natürlich unnötig ;)
	}

	return 0;
}
</code></pre>
<p>EDIT die Zweite: Noch ein kleines Fehlerschen ausgemerzt. Es ist einfach noch zu früh <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/1816873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816873</guid><dc:creator><![CDATA[Mizar]]></dc:creator><pubDate>Thu, 03 Dec 2009 07:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 07:16:23 GMT]]></title><description><![CDATA[<pre><code>stringstream stream;
        [...]
        stream &lt;&lt; i &lt;&lt; &quot;.png&quot;;
        stream.str().c_str() // &lt;-- &quot;1.png&quot; als c-string  für i = 1
        stream.str(&quot;&quot;); // &lt;-- string wieder löschen für die nächste eingabe
</code></pre>
<p>Aber statt deines Arrays wäre es wohl einfacher mit vector zu arbeiten wie schon vorgeschlagen.</p>
<p>EDIT:<br />
Da war wohl einer schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816876</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Thu, 03 Dec 2009 07:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 16:14:47 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<pre><code class="language-cpp">stream &lt;&lt; i &lt;&lt; &quot;.png&quot;;
</code></pre>
</blockquote>
<p>Ja, das wäre natürlich noch eine Verbesserung des oben geposteten Codes. <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/1817210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817210</guid><dc:creator><![CDATA[Mizar]]></dc:creator><pubDate>Thu, 03 Dec 2009 16:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Thu, 03 Dec 2009 16:40:08 GMT]]></title><description><![CDATA[<blockquote>
<p>hmm. Das ist doof.<br />
Wie macht man das denn richtig?</p>
</blockquote>
<p>Indem du bei den Grundlagen beginnst! Im FAQ dieses Forums gibt es genug Hinweise, wie man mit C++ beginnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817222</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 03 Dec 2009 16:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 11:33:54 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Die Stringoperationen in C++ sind zwar alle super durchdacht und großteils auch toll umgesetzt, aber für solche Kleinigkeiten wirds dann schnell mal unübersichtlich.</p>
<p>In C++ würde ich es mit einem Stringstream machen:</p>
<pre><code>std::stringstream ss;
  ss &lt;&lt; i &lt;&lt; &quot;.png&quot;;
  scr[i] = IMG_Load(ss.str().c_str())
</code></pre>
<p>(denn ss.str() liefert einen std::string retour und .c_str() liefert einen C-String vom std::string)</p>
<p>Aber warum eigentlich nicht mit den bewährten C-Funktionen:</p>
<pre><code>char buffer[128];
  sprintf(buffer, &quot;%d%s&quot;, i, &quot;.png&quot;);
  scr[i] = IMG_Load(buffer);
</code></pre>
<p>unter Visual C++ (also mit dem Microsoft Compiler) sollte die zweite Zeile sicherer lauten:</p>
<pre><code>sprintf_s(buffer, sizeof(buffer), &quot;%d%s&quot;, i, &quot;.png&quot;);
</code></pre>
<p>Dadurch wird verhindert daß das Ergebnis größer werden kann als der buffer.</p>
<p>In C++ gäbs auch noch eine Quick&amp;Dirty Methode:</p>
<pre><code>scr[i] = IMG_Load( (std::string(itoa(i)) + &quot;.png&quot;).c_str() );
</code></pre>
<p>Ich denke ich würde mich für die zweite Methode entscheiden da die erste zu aufwendig und die letzte ganz übel gefährlich ist. Aber ich will ja nichts vorenthalten <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>mfg<br />
Elerian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817769</guid><dc:creator><![CDATA[Elerian]]></dc:creator><pubDate>Fri, 04 Dec 2009 11:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 11:51:59 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich denke ich würde mich für die zweite Methode entscheiden da die erste zu aufwendig und die letzte ganz übel gefährlich ist. Aber ich will ja nichts vorenthalten</p>
</blockquote>
<p>Also 3 Zeilen ordentliches C++ ist aufwendiger als 3 Zeilen C? Das Argument verstehe ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817772</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 04 Dec 2009 11:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 14:03:53 GMT]]></title><description><![CDATA[<pre><code>stringstream stream;
char buffer[128];

- - - - - - - - - - - -
Das konstruieren ist für mich der entscheidenste Punkt von allen dreien wenn es um die intuitivität geht.
stream &lt;&lt; i &lt;&lt; &quot;.png&quot;;
sprintf(buffer, &quot;%d%s&quot;, i, &quot;.png&quot;);

- - - - - - - - - - - -

scr[i] = IMG_Load(stream.str().c_str())  
 scr[i] = IMG_Load(buffer);
</code></pre>
<p>Also ich finde die c++ variante sieht zum einen besser aus und ist nach meiner Einschätzung auch intuitiver zu nutzen.</p>
<p>Aber das ist wohl auch eine Frage der Gewöhnung. Soll jeder wie er/sie will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817863</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Fri, 04 Dec 2009 14:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 19:10:43 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<p>Also ich finde die c++ variante sieht zum einen besser aus und ist nach meiner Einschätzung auch intuitiver zu nutzen.</p>
</blockquote>
<p>Das finde ich auch. std::stringstream erstellen, die Zeichenkette über den Eingabeoperator des std::stringstreams zusammenbasteln und das ganze ruck zuck der Funktion übergeben.</p>
<p>Elerian schrieb:</p>
<blockquote>
<p>Ich denke ich würde mich für die zweite Methode entscheiden da die erste zu aufwendig und die letzte ganz übel gefährlich ist.</p>
</blockquote>
<p>Ich sehe darin ehrlich gesagt keinen großen Aufwand <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1817998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1817998</guid><dc:creator><![CDATA[Mizar]]></dc:creator><pubDate>Fri, 04 Dec 2009 19:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 21:15:08 GMT]]></title><description><![CDATA[<p>Alle Methoden abgelehnt, sind viel zu lang. Verwendet doch boost. Entweder boost::format oder boost::lexical_cast:</p>
<pre><code class="language-cpp">// format:
scr[i] = IMG_Load(str(format(&quot;%d.png&quot;) % i).c_str()); 

// lexical cast:
string filename = lexical_cast&lt;string&gt;(i) + &quot;.png&quot;;
scr[i] = IMG_Load(filename.c_str());
</code></pre>
<p>Ist wesentlich kuerzer und weniger verbose als die stringstream-loesung, aber dabei typsafe (im gegensatz zu sprintf).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818040</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Fri, 04 Dec 2009 21:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Fri, 04 Dec 2009 21:23:02 GMT]]></title><description><![CDATA[<p>Also das verbose ist ja kein Grund. Dafür kann man sich ja eine einfache Funktion schreiben. Und wegen Geschwindigkeit: Wenn ich mich nicht irre arbeitet lexical_cast intern ja auch mit streams..</p>
<p>EDIT:<br />
Was aber nicht heisst, dass ich das als keine schöne Lösung empfinde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818043</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 04 Dec 2009 21:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::map und der Gebrauch. on Sun, 06 Dec 2009 18:30:06 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Also das verbose ist ja kein Grund. Dafür kann man sich ja eine einfache Funktion schreiben. Und wegen Geschwindigkeit: Wenn ich mich nicht irre arbeitet lexical_cast intern ja auch mit streams..</p>
<p>EDIT:<br />
Was aber nicht heisst, dass ich das als keine schöne Lösung empfinde.</p>
</blockquote>
<p>Klar ist verbose ein Grund. Laengerer Code ist schwerer zu verstehen <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="😉"
    /> Und die Funktion musst du eben nicht selbst schreiben, denn genau das hat boost gemacht (und ja, lexical_cast verwendet stringstreams).<br />
Von Geschwindigkeit hab ich nie geredet, der Code vom OP ist ja nicht Performancekritisch (die boost-Loesungen sind sicher nicht effizienter als stringstreams, wobei die vermutlich nichtmal selbst Geschwindigkeitsbiester sind)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818756</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sun, 06 Dec 2009 18:30:06 GMT</pubDate></item></channel></rss>