<?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 find fehler]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich benötige Hilfe bei einem Code, in dem ich die std::map routinen Verwende. Diese funktionieren seit Kurzem nicht mehr und ich finde den Fehler leider nicht. In dem Code verwalte ich Knoten, die ich nach ihrer ID finden möchte. Die Knoten sind über eine Klasse definiert, die ich in der std::map ablege. Der Code lautet:</p>
<pre><code>template &lt; typename NodeType &gt; class BaseNLs
{
   public:									
   BaseNLs();
   NodeType* GetNodeOfGlobNr(int nGlobNr);
   ...
   protected:
   std::map&lt; int, NodeType* &gt; m_mapND;	
}
</code></pre>
<p>Hinzufügen von Punkten:</p>
<pre><code>NodeType pNewNode = new NodeType(nGlobNr, coo); // int nGlobNr, coo: Koordinaten
 m_mapND[nGlobNr] = pNewNode;
</code></pre>
<p>Suchen der Punkte mittels:</p>
<pre><code>std::map &lt;int, NodeType* &gt;::iterator iter;
 iter = m_mapND.find(NodeNr);
</code></pre>
<p>Die Funktion map.find() findet leider nie einen Eintrag. Zudem habe ich festgestellt, dass die Einträge in m_mapND nicht sortiert werden. - Kann mir jemand sagen woran dies liegen kann?</p>
<p>Besten Dank für die Hife!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298578/std-map-find-fehler</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 19:41:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298578.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jan 2012 15:49:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map find fehler on Mon, 23 Jan 2012 15:49:15 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich benötige Hilfe bei einem Code, in dem ich die std::map routinen Verwende. Diese funktionieren seit Kurzem nicht mehr und ich finde den Fehler leider nicht. In dem Code verwalte ich Knoten, die ich nach ihrer ID finden möchte. Die Knoten sind über eine Klasse definiert, die ich in der std::map ablege. Der Code lautet:</p>
<pre><code>template &lt; typename NodeType &gt; class BaseNLs
{
   public:									
   BaseNLs();
   NodeType* GetNodeOfGlobNr(int nGlobNr);
   ...
   protected:
   std::map&lt; int, NodeType* &gt; m_mapND;	
}
</code></pre>
<p>Hinzufügen von Punkten:</p>
<pre><code>NodeType pNewNode = new NodeType(nGlobNr, coo); // int nGlobNr, coo: Koordinaten
 m_mapND[nGlobNr] = pNewNode;
</code></pre>
<p>Suchen der Punkte mittels:</p>
<pre><code>std::map &lt;int, NodeType* &gt;::iterator iter;
 iter = m_mapND.find(NodeNr);
</code></pre>
<p>Die Funktion map.find() findet leider nie einen Eintrag. Zudem habe ich festgestellt, dass die Einträge in m_mapND nicht sortiert werden. - Kann mir jemand sagen woran dies liegen kann?</p>
<p>Besten Dank für die Hife!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171498</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Mon, 23 Jan 2012 15:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Mon, 23 Jan 2012 15:55:34 GMT]]></title><description><![CDATA[<p>Da werden Pointer sortiert, das ist dir klar, oder? Falls du das nicht möchtest, musst du eine passende Vertauschungsfunktion schreiben und angeben.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Und warum überhaupt über Pointer? Mag sein, dass du einen Grund hast, aber er wird nicht klar, da deine Klasse keine virtuellen Methoden hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171500</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 23 Jan 2012 15:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Mon, 23 Jan 2012 15:55:28 GMT]]></title><description><![CDATA[<ol>
<li>dein &quot;new NodeType&quot; sollte ein NodeType* und nicht ein NodeType zurückgeben.</li>
<li>mit &quot;m_mapND[nGlobNr] = pNewNode;&quot; Handelst du dir evtl. Speicherlecks ein, wenn schon ein Eintrag für nGlobNr vorhanden war.</li>
</ol>
<p>Zu deinem Problem: Anhand deines Codes kann ich jetzt nichts sehen. Du hast aber ganz offensichtlich nicht den originalcode gepostet (siehe 1), das hätte so nicht compiliert).</p>
<p>Liefere uns bitte mal den aufs Wesentliche reduzierten, compilierbaren Code, mit dem man den Fehler noch nachstellen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171501</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 23 Jan 2012 15:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Mon, 23 Jan 2012 16:58:00 GMT]]></title><description><![CDATA[<p>pumuckl und SeppJ, vielen Dank für die schnellen Antworten.</p>
<p>Zu 1)</p>
<pre><code>NodeType pNewNode = new NodeType(nGlobNr, coo);
</code></pre>
<p>war ein Tippfehler. Richtig lautet die Zeile:</p>
<pre><code>NodeType *pNewNode = new NodeType(nGlobNr, coo);
</code></pre>
<p>Zu 2) Ich prüfe zunächst, ob der Eintrag schon vorhanden ist und füge ihn nur zu, wenn dies noch nicht der Fall ist. Zudem erhalte ich den gleichen Fehler, wenn ich die map.insert - Funktion verwende.</p>
<p>Ich stelle jetzt eine abgespeckte Version meines Codes zusammen und werden ihn posten, sobald ich damit fertig bin.</p>
<p>Thilo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171524</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Mon, 23 Jan 2012 16:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Mon, 23 Jan 2012 17:03:55 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Da werden Pointer sortiert, das ist dir klar, oder?</p>
</blockquote>
<p>Der Schlüssel ist doch vom Typ int.</p>
<p>@Thilo: zu wenig Kontext gibt's hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171526</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 23 Jan 2012 17:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 09:24:31 GMT]]></title><description><![CDATA[<p>Nochmals vielen Dank für die Antworten. Wie gewünscht, habe ich den orginalen Code etwas reduziert, um ihn vollständiger anzugeben. Auch mit diesem Ausschnitt kann ich den Fehler reproduzieren. Für Hinweise zum Fehler wäre ich Euch dankbar.</p>
<pre><code>#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

struct Node
{
	std::vector&lt; double &gt; _coo;
	int     _globNr;
};

class NLs
{
public:							
	NLs(){};						
	void addNode(int nGlobNr,  std::vector&lt; double &gt; *coo);
	Node* findNode(int nGlobNr);
protected:						
	std::map&lt; int,  Node* &gt; m_mapND;		
};

void NLs::addNode(int nGlobNr, std::vector&lt; double &gt; *coo)
{
	Node *newNode = NULL;
	std::map &lt;int, Node*&gt;::const_iterator iter;
	int tf(0);
	iter = this-&gt;m_mapND.find(nGlobNr);
	if(iter==m_mapND.end())		
	{
		newNode = new Node();
		for(int i=0; i&lt;3; i++)
			newNode-&gt;_coo.push_back( (*coo)[i] );
		newNode-&gt;_globNr = nGlobNr;
		m_mapND.insert(std::pair&lt; int, Node* &gt;(nGlobNr,newNode) );		
	}	
}
Node* NLs::findNode(int NodeNr)
{
	std::map &lt;int, Node* &gt;::iterator iter;
	Node *fN;	

	iter = m_mapND.find(NodeNr);
	if(iter!=m_mapND.end()){
		fN = iter-&gt;second;
		return fN;
	}
	else{
		std::cout &lt;&lt; &quot; Knoten mit der globalen Nr &quot; &lt;&lt; NodeNr &lt;&lt; &quot; nicht gefunden &quot; &lt;&lt; std::endl;
		return NULL;
	}

}
int main()
{			
	NLs NodeList;
	std::vector&lt; double &gt; coo(3);
	coo[0] = 0.0;
	coo[1] = 1.3;
	coo[2] = 4.6;

	NodeList.addNode(1, &amp;coo);
	NodeList.addNode(2, &amp;coo);
	NodeList.addNode(3, &amp;coo);
	NodeList.addNode(4, &amp;coo);

	Node* fN = NodeList.findNode(4);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2171771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171771</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Tue, 24 Jan 2012 09:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 09:38:30 GMT]]></title><description><![CDATA[<p>Ich kann dein Problem nicht nachvollziehen. Habe den Code eben ausprobiert, da findet er einen Knoten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171778</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 24 Jan 2012 09:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 09:41:39 GMT]]></title><description><![CDATA[<p>@ daddy_felix: Das habe ich befürchtet. Kann es sein, dass der Fehler durch eine Compilereinstellung verursacht wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171779</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Tue, 24 Jan 2012 09:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 09:48:05 GMT]]></title><description><![CDATA[<p>Thilo schrieb:</p>
<blockquote>
<p>@ daddy_felix: Das habe ich befürchtet. Kann es sein, dass der Fehler durch eine Compilereinstellung verursacht wird?</p>
</blockquote>
<p>Schwierig. Compilereinstellungen die ein gültiges Programm ungültig machen sind selten <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>Hast du mal ne Debug-Anzeige, was am Ende in der map steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171783</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 24 Jan 2012 09:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 10:00:07 GMT]]></title><description><![CDATA[<p>In der Map stehen die Knoten. Diese sind jedoch nicht aufstreigend, sondern absteigend sortiert.</p>
<p>- m_mapND [4]<br />
+ [0] (4,0x004b6388 {_coo=[3](0.00000000000000000,1.3000000000000000,4.5999999999999996) _globNr=4 }) std::pair&lt;const int, Node *&gt;<br />
+ [1] (3,0x004b6240 {_coo=[3](0.00000000000000000,1.3000000000000000,4.5999999999999996) _globNr=3 }) std::pair&lt;const int, Node *&gt;<br />
+ [2] (2,0x004b60f8 {_coo=[3](0.00000000000000000,1.3000000000000000,4.5999999999999996) _globNr=2 }) std::pair&lt;const int, Node *&gt;<br />
+ [3] (1,0x004b2b00 {_coo=[3](0.00000000000000000,1.3000000000000000,4.5999999999999996) _globNr=1 }) std::pair&lt;const int, Node *&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171787</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Tue, 24 Jan 2012 10:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 10:37:43 GMT]]></title><description><![CDATA[<p>Thilo schrieb:</p>
<blockquote>
<p>Diese sind jedoch nicht aufstreigend, sondern absteigend sortiert.</p>
</blockquote>
<p>Das ist wurscht, solang das Suchen konsistent geschieht. Versuch mal mit dem Debugger durch map::find zu steppen und schau, was er da macht, und warum er den Knoten nicht findet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171799</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 24 Jan 2012 10:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 12:39:58 GMT]]></title><description><![CDATA[<p>Ich kann da auch nichts erkennen, was falsch sein soll.</p>
<p>Trotzdem ein paar Kommentare:</p>
<p>Thilo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class NLs
{
public:							
	NLs(){};						
	void addNode(int nGlobNr,  std::vector&lt; double &gt; *coo);
	Node* findNode(int nGlobNr);
protected:						
	std::map&lt; int,  Node* &gt; m_mapND;		
};
</code></pre>
</blockquote>
<p>Das Semikolon hinter dem {} ist überflüssig. Selbst die ganze Zeile ist überflüssig.</p>
<p>Thilo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void NLs::addNode(int nGlobNr, std::vector&lt; double &gt; *coo)
</code></pre>
</blockquote>
<p>besser: <code>std::vector&lt;double&gt; const&amp; coo</code></p>
<p>Thilo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">{
	Node *newNode = NULL;
	std::map &lt;int, Node*&gt;::const_iterator iter;
	int tf(0);
	iter = this-&gt;m_mapND.find(nGlobNr);
	if(iter==m_mapND.end())		
	{
		newNode = new Node();
		for(int i=0; i&lt;3; i++)
			newNode-&gt;_coo.push_back( (*coo)[i] );
</code></pre>
</blockquote>
<p>Das geht auch einfacher:<br />
<code>newNode-&gt;_coo = *coo; // bzw &quot;= coo;&quot;, falls coo eine Referenz ist</code></p>
<p>Thilo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">newNode-&gt;_globNr = nGlobNr;
		m_mapND.insert(std::pair&lt; int, Node* &gt;(nGlobNr,newNode) );
</code></pre>
</blockquote>
<p>der value_type Deiner map ist pair&lt;<strong>const</strong> int,Node*&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171845</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 24 Jan 2012 12:39:58 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find fehler on Tue, 24 Jan 2012 13:04:58 GMT]]></title><description><![CDATA[<p>Das Problem ist gelöst. Hatte nicht aufgepasst und eine Datei des Compilers geändert (functional.h).</p>
<p>Nochmals vielen Dank für die vielen und schnellen Antworten. Ich werde die Hinweise beachten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171864</guid><dc:creator><![CDATA[Thilo]]></dc:creator><pubDate>Tue, 24 Jan 2012 13:04:58 GMT</pubDate></item></channel></rss>