<?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[Unklarheit bei map &amp;lt; &amp;gt; Container]]></title><description><![CDATA[<p>Hallo,</p>
<p>Folgendes Problem. Ich arbeite mit 2 Maps, die vom gleichen Typ sind:<br />
first -&gt; integer index<br />
second -&gt; pointer auf eine 1-Dimensionale Liste (Vektor)</p>
<p>Im Header (s.u.) als MTrigMapType definiert.</p>
<p>Nun möchte ich nacheinander die beiden Maps mit verschiedenen Vektoren versehen, je nach Index wird ein anderer Vektor zugewiesen.<br />
Im Beispiel hier nur mit einem Durchlauf (nur Index 0).</p>
<p>Wenn ich die erste Map fertig habe und sie danach wieder auslese (Befehl: &quot;gib mir den Vektor an Index 0&quot;) bekomme ich auch wieder meinen Vektor. Alles OK.</p>
<p>Wenn ich jedoch <strong>vor</strong> diesem Auslesen noch die <strong>zweite</strong> Map befülle (gleiche Art und Weise), gelingt der AUslesevorgang (der ersten Map) nicht mehr, sodern ich bekomme den Vektor zurück den ich der anderen Map zugewiesen habe.<br />
Wie kann so etwas kommen? In meiner Auslesefunktion (ganz unten) übergebe ich ja den Map-Namen, der ausdrücklich Map-Nr.1 ist und nicht Nr. 2, trotzdem gibt die Fkt mit den Inhalt von Map2 zurück.</p>
<p>Kann mir das jemand erklären?</p>
<p>Vielen Dank schonmal !!!</p>
<p>Header:<br />
---------</p>
<pre><code>typedef std::vector&lt;TriggerType*&gt; TTrigs;
typedef std::map&lt;int, TTrigs*&gt; MTrigMapType;

MTrigMapType mRxTrigList;
MTrigMapType mTxTrigList;
</code></pre>
<p>Source:<br />
---------</p>
<pre><code>vTmpList.clear();
  FillTrigList(vTmpList);  // fill list in extern function
  mRxTrigList.insert(make_pair(0, &amp;vTmpList)); // add list to map 

  /* TEST: Read out list again */
  TTrigs tmp0 = GetTrigListfromMap(0, mRxTrigList);

#if 0
  vTmpList.clear();
  FillTrigList(vTmpList);  // fill list in extern function
  mTxTrigList.insert(make_pair(0, &amp;vTmpList)); // add list to map 
#endif

  /* TEST: Read out list once again */
  TTrigs tmp1 = GetTrigListfromMap(0, mRxTrigList);
</code></pre>
<pre><code>TTrigs Module::GetTrigListfromMap(int Idx, MTrigMapType map_name)
{
  MTrigMapType::iterator iter = map_name.begin();

  iter = map_name.find(Idx);
  if( iter != map_name.end() ) 
    return *iter-&gt;second;
  else
    {
      // Error
      return NULL;   
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/261569/unklarheit-bei-map-lt-gt-container</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 04:37:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261569.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Feb 2010 17:05:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unklarheit bei map &amp;lt; &amp;gt; Container on Sat, 20 Feb 2010 17:05:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Folgendes Problem. Ich arbeite mit 2 Maps, die vom gleichen Typ sind:<br />
first -&gt; integer index<br />
second -&gt; pointer auf eine 1-Dimensionale Liste (Vektor)</p>
<p>Im Header (s.u.) als MTrigMapType definiert.</p>
<p>Nun möchte ich nacheinander die beiden Maps mit verschiedenen Vektoren versehen, je nach Index wird ein anderer Vektor zugewiesen.<br />
Im Beispiel hier nur mit einem Durchlauf (nur Index 0).</p>
<p>Wenn ich die erste Map fertig habe und sie danach wieder auslese (Befehl: &quot;gib mir den Vektor an Index 0&quot;) bekomme ich auch wieder meinen Vektor. Alles OK.</p>
<p>Wenn ich jedoch <strong>vor</strong> diesem Auslesen noch die <strong>zweite</strong> Map befülle (gleiche Art und Weise), gelingt der AUslesevorgang (der ersten Map) nicht mehr, sodern ich bekomme den Vektor zurück den ich der anderen Map zugewiesen habe.<br />
Wie kann so etwas kommen? In meiner Auslesefunktion (ganz unten) übergebe ich ja den Map-Namen, der ausdrücklich Map-Nr.1 ist und nicht Nr. 2, trotzdem gibt die Fkt mit den Inhalt von Map2 zurück.</p>
<p>Kann mir das jemand erklären?</p>
<p>Vielen Dank schonmal !!!</p>
<p>Header:<br />
---------</p>
<pre><code>typedef std::vector&lt;TriggerType*&gt; TTrigs;
typedef std::map&lt;int, TTrigs*&gt; MTrigMapType;

MTrigMapType mRxTrigList;
MTrigMapType mTxTrigList;
</code></pre>
<p>Source:<br />
---------</p>
<pre><code>vTmpList.clear();
  FillTrigList(vTmpList);  // fill list in extern function
  mRxTrigList.insert(make_pair(0, &amp;vTmpList)); // add list to map 

  /* TEST: Read out list again */
  TTrigs tmp0 = GetTrigListfromMap(0, mRxTrigList);

#if 0
  vTmpList.clear();
  FillTrigList(vTmpList);  // fill list in extern function
  mTxTrigList.insert(make_pair(0, &amp;vTmpList)); // add list to map 
#endif

  /* TEST: Read out list once again */
  TTrigs tmp1 = GetTrigListfromMap(0, mRxTrigList);
</code></pre>
<pre><code>TTrigs Module::GetTrigListfromMap(int Idx, MTrigMapType map_name)
{
  MTrigMapType::iterator iter = map_name.begin();

  iter = map_name.find(Idx);
  if( iter != map_name.end() ) 
    return *iter-&gt;second;
  else
    {
      // Error
      return NULL;   
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1858735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858735</guid><dc:creator><![CDATA[se1111]]></dc:creator><pubDate>Sat, 20 Feb 2010 17:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit bei map &amp;lt; &amp;gt; Container on Sat, 20 Feb 2010 17:35:53 GMT]]></title><description><![CDATA[<p>Irgendwie zu wenig Code...<br />
Du machst was gefährliches: In eine Struktur die nen Pointer erwartet legst du eine Referenz auf ein lokales Objekt. Wenn das referenzierte Objekt nicht in der main liegt oder ein globales Objekt ist, wird das nach Ende der Funktion zerstört - das wars!<br />
Das eigentlich Problem liegt wohl daran dass du immer die selbe Liste (vTmpList) in beiden maps ablegst. Leg mal bitte die Listen separat mit new an oder legt in die Map gleich ListValues nicht pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858745</guid><dc:creator><![CDATA[johanniskraut]]></dc:creator><pubDate>Sat, 20 Feb 2010 17:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit bei map &amp;lt; &amp;gt; Container on Sat, 20 Feb 2010 17:46:04 GMT]]></title><description><![CDATA[<p>He, du hast recht. Danke ! Ich sehe es jetzt auch.</p>
<p>Ich speichere in der Map die Adresse der TempLste. Diese benutz ich danach wieder mit anderen Werten (gleiche Stelle im RAM wird neu genutzt).<br />
Bei AUslesen später wird von der Adresse der TempList gelesen, die ja wieder anderes enthält.</p>
<p>WIe meinst du das mit Listvalues?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858748</guid><dc:creator><![CDATA[se1111]]></dc:creator><pubDate>Sat, 20 Feb 2010 17:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit bei map &amp;lt; &amp;gt; Container on Sat, 20 Feb 2010 19:35:46 GMT]]></title><description><![CDATA[<p>se1111 schrieb:</p>
<blockquote>
<p>WIe meinst du das mit Listvalues?</p>
</blockquote>
<pre><code class="language-cpp">typedef std::map&lt;int, TTrigs*&gt; MTrigMapType;
</code></pre>
<p>ändern in</p>
<pre><code class="language-cpp">typedef std::map&lt;int, TTrigs&gt; MTrigMapType;
</code></pre>
<p>Da TTrigs selber eine Liste aus Pointern ist geht kopieren ratzfatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858793</guid><dc:creator><![CDATA[johanniskraut]]></dc:creator><pubDate>Sat, 20 Feb 2010 19:35:46 GMT</pubDate></item></channel></rss>