<?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[map mit std::string key liefert falsche Ergebnisse]]></title><description><![CDATA[<p>Moin,</p>
<p>ich habe mal wieder ein Prolem und zwar deklariere ich eine map ind einer klasse</p>
<pre><code>class X
{
  protected:
      std::map&lt;std::string, uint&gt; data;
}
</code></pre>
<p>welche ich anhand eienr methode füllen lasse</p>
<pre><code>void Fill()
{
   ... getting all availible data handles here
   map[name] = handle;
}
</code></pre>
<p>Jetzt versuche ich darauf zuzugreifen und der string, der erzeugt wird, wird einfach nicht richtig verglichen, sodass die map eben glaubt es würde ein neues element angelegt.</p>
<pre><code>main()
{
  X x;
  x.Fill();

  /*
   * any = 0
   * values = 1
   */

  x[&quot;values&quot;] = 20; //&lt;- hier wird neues element angelegt

  /*
   * any = 0
   * values = 1
   * values = 20
   */
}
</code></pre>
<p>Wie kann ich das verhindern bzw. wie wird &quot;values&quot; eben als values verglichen und nicht als pointer oder wie auch immer?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318979/map-mit-std-string-key-liefert-falsche-ergebnisse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 07:33:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318979.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Aug 2013 14:52:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 14:52:20 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>ich habe mal wieder ein Prolem und zwar deklariere ich eine map ind einer klasse</p>
<pre><code>class X
{
  protected:
      std::map&lt;std::string, uint&gt; data;
}
</code></pre>
<p>welche ich anhand eienr methode füllen lasse</p>
<pre><code>void Fill()
{
   ... getting all availible data handles here
   map[name] = handle;
}
</code></pre>
<p>Jetzt versuche ich darauf zuzugreifen und der string, der erzeugt wird, wird einfach nicht richtig verglichen, sodass die map eben glaubt es würde ein neues element angelegt.</p>
<pre><code>main()
{
  X x;
  x.Fill();

  /*
   * any = 0
   * values = 1
   */

  x[&quot;values&quot;] = 20; //&lt;- hier wird neues element angelegt

  /*
   * any = 0
   * values = 1
   * values = 20
   */
}
</code></pre>
<p>Wie kann ich das verhindern bzw. wie wird &quot;values&quot; eben als values verglichen und nicht als pointer oder wie auch immer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343005</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 02 Aug 2013 14:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 14:58:34 GMT]]></title><description><![CDATA[<p>Es gibt std::find, um zu überprüfen, ob ein Eintrag existiert. Grundsätzlich kann eine std::map aber gar keine doppelten Einträge aufnehmen. Der Eintrag muss also unterschiedlich sein.</p>
<p>Ansonsten bastel mal ein besser nachvollziehbares und bestenfalls sogar kompilierbares Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343007</guid><dc:creator><![CDATA[fvgggg]]></dc:creator><pubDate>Fri, 02 Aug 2013 14:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 15:08:54 GMT]]></title><description><![CDATA[<p>Heißt die Map jetzt data, map oder x?<br />
Woher weißt du, dass ein neuer Eintrag angelegt wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343012</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 02 Aug 2013 15:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 15:14:19 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Heißt die Map jetzt data, map oder x?</p>
</blockquote>
<p>spielt das ne rolle? ist fürn beispiel doch unrelevant</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Woher weißt du, dass ein neuer Eintrag angelegt wird?</p>
</blockquote>
<p>weil ich im debugmodus im objektinspektor die map aufgemacht und die einträge angeguckt habe und der &quot;values&quot; eintrag war doppelt mit unterschiedlichen werten (2 für original und 0 für den neu angelegten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343015</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 02 Aug 2013 15:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 15:23:49 GMT]]></title><description><![CDATA[<p>Pria schrieb:</p>
<blockquote>
<p>der &quot;values&quot; eintrag war doppelt mit unterschiedlichen werten (2 für original und 0 für den neu angelegten)</p>
</blockquote>
<p>hast du einen quantencomputer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343016</guid><dc:creator><![CDATA[kaldental]]></dc:creator><pubDate>Fri, 02 Aug 2013 15:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 15:44:35 GMT]]></title><description><![CDATA[<p>Pria schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Heißt die Map jetzt data, map oder x?</p>
</blockquote>
<p>spielt das ne rolle? ist fürn beispiel doch unrelevant</p>
</blockquote>
<p>Wenn im Beispiel alle 3 Versionen vorkommen bedeutet das, dass du irgendetwas zeigst, aber <strong>nicht</strong> den Code den du wirklich benutzt.</p>
<p>Pria schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Woher weißt du, dass ein neuer Eintrag angelegt wird?</p>
</blockquote>
<p>weil ich im debugmodus im objektinspektor die map aufgemacht und die einträge angeguckt habe und der &quot;values&quot; eintrag war doppelt mit unterschiedlichen werten (2 für original und 0 für den neu angelegten)</p>
</blockquote>
<p>Da du laut deinem Beispiel 20 reinschreibst, wäre 0 sehr überraschend. Aber im echten Code tust du das ja vermutlich auch nicht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343023</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 02 Aug 2013 15:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 16:03:05 GMT]]></title><description><![CDATA[<p>Ich poste hier mit sicherheit nicht alle 2000 zeilen code, dies sind die relevanten zeilen, wie es <strong>in etwa</strong> aussieht, <strong>ohne wichtige zwischenschritte ausgelassen zu haben</strong></p>
<ul>
<li>definition in klasse mit map&lt;string, uint&gt;</li>
<li>vorbelegung durch fill mit string name und uint handle;</li>
<li>aufrufen in der main-methode durch klasse.liste[&quot;values&quot;] = 20;</li>
<li>debug-break, listenwert ist doppelt belegt.</li>
</ul>
<p>Nicht mehr nicht weniger!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343028</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 02 Aug 2013 16:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 16:12:29 GMT]]></title><description><![CDATA[<p>Dann poste doch mal bitte ein kompilierbares (Minimal-)Beispiel, das diesen Fehler erzeugt.</p>
<p>Edit:</p>
<pre><code>#include &lt;map&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

void printMap(map&lt;string, int&gt; const&amp; m)
{
	for(auto const&amp; p : m)
		cout &lt;&lt; p.first &lt;&lt; &quot; -&gt; &quot; &lt;&lt; p.second &lt;&lt; endl;
}

int main()
{
	map&lt;string, int&gt; m;

	m[&quot;Ding&quot;] = 0;
	m[&quot;Dong&quot;] = 1;
	m[&quot;Value&quot;] = 284;

	printMap(m);

	m[&quot;Ding&quot;] = 10;

	printMap(m);

	return 0;
}
</code></pre>
<p>Bei mir funktioniert das einwandfrei:</p>
<pre><code>Ding -&gt; 0
Dong -&gt; 1
Value -&gt; 284
Ding -&gt; 10
Dong -&gt; 1
Value -&gt; 284
</code></pre>
<p><a href="https://ideone.com/5idjbx" rel="nofollow">.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343033</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 02 Aug 2013 16:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 16:47:12 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich poste hier mit sicherheit nicht alle 2000 zeilen code, dies sind die relevanten zeilen, wie es in etwa aussieht, ohne wichtige zwischenschritte ausgelassen zu haben</p>
</blockquote>
<p>Anscheinend nicht, da ein Fehler vorliegt und er so nicht nachvollzogen werden kann. Du musst dein Code auch nicht hier posten, dafuer gibt es bspw. <a href="http://pastebin.com" rel="nofollow">pastebin.com</a> oder <a href="http://ideone.com" rel="nofollow">ideone.com</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343044</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 02 Aug 2013 16:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 20:26:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20509">@Pria</a>: unterscheiden sich die Einträge evtl. durch Groß-/Kleinschreibung oder Leerzeichen (vorne oder hinten)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343070</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 20:32:17 GMT]]></title><description><![CDATA[<p>Also nochmal, das beispiel entspricht bereits dem minimalbeispiel<br />
aber gut,</p>
<pre><code>#include &lt;map&gt;
#include &lt;string&gt;

struct X
{
	std::map&lt;std::string, int&gt; myMap;

	inline void Fill()
	{
		int length = 0;
		std::string result(20,0);
		glGetActiveUniformName(2,2,20,&amp;length,&amp;result[0]); //&lt;- binden von name an entsprechendes handle (in diesem Fall handle=2)
                //könnte aber auch jede andere 3t Anbieter Schnittstellenfunktion sein, die einen string erzeugt

		myMap[result] = 2;
	}
};

int main()
{
    X x;
    x.Fill();

    //sizeof mymap = 1
    int exmaple_check = x.myMap[&quot;texture&quot;];

    //size of mymap = 2 with
    /*
    *  [0] (&quot;texture&quot;,2)
    *  [1] (&quot;texture&quot;,0)
    */

    assert(example_check &gt; 0); //&lt;- fail
}
</code></pre>
<p>So, Originalcode wirklich aufs minimalste reduziert, defakto string &quot;texture&quot; in der Fill-Funktion wird als völlig anderer index behandelt als string &quot;texture&quot; in main(), deshalb doppelte indizierung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343073</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 20:39:19 GMT]]></title><description><![CDATA[<p>Da hast du doch den Fehler, genau das was Th69 sagte.</p>
<p>Dein String ist 20 lang, wird in der Funktion geändert, ist aber immer noch 20 lang. Demnach unterscheiden sich eigentlich gleiche Strings immer noch, weil ihre Länge unterschiedlich ist.</p>
<p>Heißt im Klartext:</p>
<pre><code>[0] (&quot;texture            &quot;, 2)
[1] (&quot;texture&quot;, 0)
</code></pre>
<p>Edit:<br />
Lösung: Da du ja eh die neue Stringlänge in deiner Fillfunktion bekommst kannst du einfach en result.resize(length) machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343078</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to map mit std::string key liefert falsche Ergebnisse on Fri, 02 Aug 2013 21:15:41 GMT]]></title><description><![CDATA[<p>Der Inspektor hat mir nichts in der Richtung angezeigt, wie dem auch sei, ein zusätzliches result.resize(length); hat dem jetzt abhilfe getan.</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343094</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 02 Aug 2013 21:15:41 GMT</pubDate></item></channel></rss>