<?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[[ERLEDIGT] Zeiger auf Map]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe ein wenig Probleme mit der Zeigersyntax von map.</p>
<p>Header:</p>
<pre><code class="language-cpp">#ifndef GEOTOPOLOGY_H
#define GEOTOPOLOGY_H

#include &lt;map&gt;
#include &quot;utm.h&quot;
#include &quot;knot.h&quot;
#include &quot;edge.h&quot;

class GEOTopology{
	private:
		unsigned int edgeid;
		unsigned int coordid;
		unsigned int faceid;
		std::map&lt;unsigned int, UTM,  class Compare&gt;  *coordinates;
		std::map&lt;unsigned int, Knot, class Compare&gt;  *knots;
		std::map&lt;unsigned int, Edge, class Compare&gt;  *edges;

	public:
		void addcoordinate(unsigned int new_id, class UTM new_utm);
		void removecoordinate(unsigned int new_id);
		GEOTopology();
		~GEOTopology();

};

class Compare{
	public:
		bool operator()(const unsigned int &amp;one, const unsigned int &amp;two){
			if(one&gt;two) return true;
			else return false;
		}
};

#endif
</code></pre>
<p>und Hier die CPP</p>
<pre><code class="language-cpp">#include &quot;geotopology.h&quot;

GEOTopology::GEOTopology(){
	coordinates = new std::map&lt;unsigned int,class UTM,class Compare&gt;;
	knots = new std::map&lt;unsigned int,class Knot,class Compare&gt;;
	edges = new std::map&lt;unsigned int,class Edge,class Compare&gt;;
}

GEOTopology::~GEOTopology(){
	delete this-&gt;coordinates;
	delete this-&gt;knots;
	delete this-&gt;edges;
}

void GEOTopology::addcoordinate(unsigned int new_id, class UTM new_utm){
	//this-&gt;(*coordinates)[new_id] = new_utm;
	this-&gt;coordinates-&gt;operator [](new_id) = new_utm;
};
void removecoordinate(unsigned int new_id);
</code></pre>
<p>Irgenwie klappt es nicht, dass ich mit addcoordinate eine Koordinate samt einer ID hinzufügen kann.</p>
<p>Im Lehrbuch geschieht dies ohne Zeiger mit: coordinates[new_id] = new_utm;<br />
Bei mir klappt weder Zeile 16, noch zeile 17.</p>
<p>gibt es für meine Klasse Compare etwas vorbereitetes aus der STL?<br />
Es ist ein einfacher unsigned integer Sortierer.</p>
<p>Wäre Dankbar wenn jemand kurz die richtige Syntax für die Zeilen 16 und 17 aus der cpp posten könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267549/erledigt-zeiger-auf-map</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 11:57:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267549.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 May 2010 12:53:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 20:32:46 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe ein wenig Probleme mit der Zeigersyntax von map.</p>
<p>Header:</p>
<pre><code class="language-cpp">#ifndef GEOTOPOLOGY_H
#define GEOTOPOLOGY_H

#include &lt;map&gt;
#include &quot;utm.h&quot;
#include &quot;knot.h&quot;
#include &quot;edge.h&quot;

class GEOTopology{
	private:
		unsigned int edgeid;
		unsigned int coordid;
		unsigned int faceid;
		std::map&lt;unsigned int, UTM,  class Compare&gt;  *coordinates;
		std::map&lt;unsigned int, Knot, class Compare&gt;  *knots;
		std::map&lt;unsigned int, Edge, class Compare&gt;  *edges;

	public:
		void addcoordinate(unsigned int new_id, class UTM new_utm);
		void removecoordinate(unsigned int new_id);
		GEOTopology();
		~GEOTopology();

};

class Compare{
	public:
		bool operator()(const unsigned int &amp;one, const unsigned int &amp;two){
			if(one&gt;two) return true;
			else return false;
		}
};

#endif
</code></pre>
<p>und Hier die CPP</p>
<pre><code class="language-cpp">#include &quot;geotopology.h&quot;

GEOTopology::GEOTopology(){
	coordinates = new std::map&lt;unsigned int,class UTM,class Compare&gt;;
	knots = new std::map&lt;unsigned int,class Knot,class Compare&gt;;
	edges = new std::map&lt;unsigned int,class Edge,class Compare&gt;;
}

GEOTopology::~GEOTopology(){
	delete this-&gt;coordinates;
	delete this-&gt;knots;
	delete this-&gt;edges;
}

void GEOTopology::addcoordinate(unsigned int new_id, class UTM new_utm){
	//this-&gt;(*coordinates)[new_id] = new_utm;
	this-&gt;coordinates-&gt;operator [](new_id) = new_utm;
};
void removecoordinate(unsigned int new_id);
</code></pre>
<p>Irgenwie klappt es nicht, dass ich mit addcoordinate eine Koordinate samt einer ID hinzufügen kann.</p>
<p>Im Lehrbuch geschieht dies ohne Zeiger mit: coordinates[new_id] = new_utm;<br />
Bei mir klappt weder Zeile 16, noch zeile 17.</p>
<p>gibt es für meine Klasse Compare etwas vorbereitetes aus der STL?<br />
Es ist ein einfacher unsigned integer Sortierer.</p>
<p>Wäre Dankbar wenn jemand kurz die richtige Syntax für die Zeilen 16 und 17 aus der cpp posten könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902709</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 20:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:14:26 GMT]]></title><description><![CDATA[<p>Ist es überhaupt nötig mit Zeigern zu arbeiten?<br />
Vielleicht gibt sich map beim Beenden ja selber frei?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902730</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 13:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:24:02 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Ist es überhaupt nötig mit Zeigern zu arbeiten?</p>
</blockquote>
<p>Nein.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Vielleicht gibt sich map beim Beenden ja selber frei?!</p>
</blockquote>
<p>Ja.</p>
<p>C++ ist nicht das Gleiche wie Java...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902736</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 26 May 2010 13:24:02 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:24:39 GMT]]></title><description><![CDATA[<p>Du brauchst keine Zeiger und es gibt <code>std::greater&lt;int&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902737</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 26 May 2010 13:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:33:07 GMT]]></title><description><![CDATA[<p>Und der Vollstängidkeit halber:</p>
<p>Der syntaktisch richtige Aufruf wäre</p>
<pre><code class="language-cpp">(*this-&gt;coordinates)[new_id] = new_utm;
</code></pre>
<p>gewesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902743</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 26 May 2010 13:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:34:30 GMT]]></title><description><![CDATA[<p>Und mit dem Implementieren von Standardkonstruktor und Destruktor, aber dem Vergessen von Kopierkonstruktor und Zuweisungsoperator eröffnest du dem undefinierten Verhalten ungeahnte Möglichkeiten. Stichwort <em>Regel der Grossen Drei</em>.</p>
<p>Ausserdem, fürs nächste Mal (falls es um mehr als nur &gt; geht):</p>
<pre><code class="language-cpp">class Compare{
    public:
        bool operator()(const unsigned int &amp;one, const unsigned int &amp;two){
            if(one&gt;two) return true;
            else return false;
        }
};
</code></pre>
<p>wird zu</p>
<pre><code class="language-cpp">struct Compare {
    bool operator() (unsigned int lhs, unsigned int rhs) {
        return lhs &gt; rhs;
    }
};
</code></pre>
<p>Die Konstruktor-Initialisierungsliste wäre auch eine Idee. Und statt jeweils <code>class</code> vor Klassentypen zu schreiben würde ich die Klasse einmal deklarieren und dann nur noch den Bezeichner verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902744</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 13:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:43:10 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Und mit dem Implementieren von Standardkonstruktor und Destruktor, aber dem Vergessen von Kopierkonstruktor und Zuweisungsoperator eröffnest du dem undefinierten Verhalten ungeahnte Möglichkeiten.</p>
</blockquote>
<p>Gilt es auch wenn man nie zuweisen möchte? Kann man dafür irgend eine Sackgassenfunktion erstellen die beides verbietet?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Stichwort Die Konstruktor-Initialisierungsliste wäre auch eine Idee. Und statt jeweils <code>class</code> vor Klassentypen zu schreiben würde ich die Klasse einmal deklarieren und dann nur noch den Bezeichner verwenden.</p>
</blockquote>
<p>Danke für den Tipp, könntest du mir kurz zeigen wie dann der Code aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902745</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 13:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 13:48:48 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Gilt es auch wenn man nie zuweisen möchte? Kann man dafür irgend eine Sackgassenfunktion erstellen die beides verbietet?</p>
</blockquote>
<p>Ja, einfach Kopierkonstruktor und Zuweisungsoperator beide privat deklarieren und nicht definieren.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Danke für den Tipp, könntest du mir kurz zeigen wie dann der Code aussieht.</p>
</blockquote>
<p>Statt</p>
<pre><code class="language-cpp">MyClass::MyClass(int number)
{
    member1 = number;
    member2 = &quot;hallo&quot;;
}
</code></pre>
<p>hast du</p>
<pre><code class="language-cpp">MyClass::MyClass(int number) : member1(number), member2(&quot;hallo&quot;)
{
}
</code></pre>
<p>Und was das überflüssige <code>class</code> angeht: Am Anfang der Datei schreibst du (falls der Typ noch nicht definiert ist):</p>
<pre><code class="language-cpp">class UTM;
</code></pre>
<p>und bei der Verwendung</p>
<pre><code class="language-cpp">void addcoordinate(unsigned int new_id, UTM new_utm);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1902749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902749</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 13:48:48 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:01:17 GMT]]></title><description><![CDATA[<p>Jetzt habe ich die Header Datei so verändert:</p>
<pre><code class="language-cpp">#include &quot;geotopology.h&quot;

GEOTopology::GEOTopology(){
}

GEOTopology::~GEOTopology(){
}

void GEOTopology::addcoordinate(unsigned int new_id, class UTM new_utm){
	coordinates[new_id] = new_utm;
}
void removecoordinate(unsigned int new_id){

}
</code></pre>
<p>Nun sagt mir der Compiler das meine UTM Klasse keinen Default Konstruktor hat. Wahrscheinlich das, was in der Vornachricht gemeint war mit dem : initialisieren.</p>
<p>Meine utm.h sieht so aus.</p>
<pre><code class="language-cpp">struct _COORDINATE{
	double h;
	double v;
	double d;
	// mode=0 -&gt; XYZ
	// mode=1 -&gt; HVD
	bool mode;
};

typedef struct _COORDINATE COORDINATE; 

class UTM{
	private:
		COORDINATE coo;

	public:		
		UTM(COORDINATE coo);
......
</code></pre>
<p>Ich möchte keinen Default Konstruktor Aufruf, sondern das direkt beim Aufruf eine Koordinate übergeben wird. Wie ist das mit dem &quot;:&quot; initialisierer zu lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902753</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 14:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:12:56 GMT]]></title><description><![CDATA[<p>Wird wohl ohne Zeiger nicht zu lösen sein..<br />
Mit zeigern könnte man beim ersten addcoordinate prüfen ob der *coordinate Zeiger NULL ist und einen neuen anlegen...</p>
<p>Sehe sonst keine Bequeme Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902763</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 14:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:18:16 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Jetzt habe ich die Header Datei so verändert:</p>
<pre><code class="language-cpp">void GEOTopology::addcoordinate(unsigned int new_id, class UTM new_utm)
</code></pre>
</blockquote>
<p>Warum hier immer noch <code>class</code> ?</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Nun sagt mir der Compiler das meine UTM Klasse keinen Default Konstruktor hat. Wahrscheinlich das, was in der Vornachricht gemeint war mit dem : initialisieren.</p>
</blockquote>
<p>Nein, der <code>std::map::operator[]</code> erfordert, dass ein Defaultkonstruktor für den Werttypen vorhanden ist. Ansonsten verwende die Memberfunktionen <code>find()</code> und <code>insert()</code> .</p>
<p>darkfate schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct _COORDINATE{
};

typedef struct _COORDINATE COORDINATE;
</code></pre>
</blockquote>
<p>Warum? Wir sind nicht in C. Definiere direkt <code>struct COORDINATE</code> .</p>
<p>darkfate schrieb:</p>
<blockquote>
<pre><code class="language-cpp">public:		
		UTM(COORDINATE coo);
</code></pre>
</blockquote>
<p>Nimm statt Kopien lieber Referenzen auf Const, wenn es sich um grössere Objekte handelt.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Wird wohl ohne Zeiger nicht zu lösen sein..<br />
Mit zeigern könnte man beim ersten addcoordinate prüfen ob der *coordinate Zeiger NULL ist und einen neuen anlegen...</p>
<p>Sehe sonst keine Bequeme Lösung.</p>
</blockquote>
<p>Doch. Überprüfe manuell, ob die Map das Element bereits speichert, und füge ansonsten eins ein (benutze oben genannte Memberfunktionen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902765</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 14:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:31:38 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Warum hier immer noch <code>class</code> ?</p>
</blockquote>
<p>Keine Ahnung? Ich habe es eigentlich dort reingeschrieben damit ich weiß dass es eine Klasse ist? Ist so etwas falsch?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>NNein, der <code>std::map::operator[]</code> erfordert, dass ein Defaultkonstruktor für den Werttypen vorhanden ist. Ansonsten verwende die Memberfunktionen <code>find()</code> und <code>insert()</code> .</p>
</blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef struct _COORDINATE COORDINATE;
</code></pre>
<p>Warum? Wir sind nicht in C. Definiere direkt <code>struct COORDINATE</code></p>
</blockquote>
<p>Soweit ich weiß müsste man sonst immer struct COORDINATE schreiben. Ist es bei C++ nicht mehr der Fall? Vielleicht gilt es auch für die neuen C99 Standards nicht mehr...</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>[cpp]Nimm statt Kopien lieber Referenzen auf Const, wenn es sich um grössere Objekte handelt.</p>
</blockquote>
<p>Wenn ich dann von Außen die Koordinate zerstöre oder verändere, dann wird doch auch die Koordinate in der List zerstört oder verändert?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Doch. Überprüfe manuell, ob die Map das Element bereits speichert, und füge ansonsten eins ein (benutze oben genannte Memberfunktionen).</p>
</blockquote>
<p>Ich versuchs..</p>
<p>Danke schonmal für den umfangreichen Support an alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902772</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 14:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:36:31 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Soweit ich weiß müsste man sonst immer struct COORDINATE schreiben. Ist es bei C++ nicht mehr der Fall?</p>
</blockquote>
<p>Nein, und das gleiche gilt auch für <code>class</code> . Lass die Schlüsselwörter also bei der Variablendeklaration ruhig weg.</p>
<p>darkfate schrieb:</p>
<blockquote>
<p>Wenn ich dann von Außen die Koordinate zerstöre oder verändere, dann wird doch auch die Koordinate in der List zerstört oder verändert?</p>
</blockquote>
<p>Ja, in der Liste dürfen auch Kopien stehen. Ich bezog mich auf die Parameterübergabe an den <code>UTM</code> -Konstruktor; diesen kannst du mit einer Const-Referenz als Parameter so deklarieren:</p>
<pre><code class="language-cpp">UTM(const COORDINATE&amp; coo);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1902775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902775</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 14:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:36:50 GMT]]></title><description><![CDATA[<p>Mit</p>
<pre><code class="language-cpp">coordinates.insert()
</code></pre>
<p>steht mir _Pairib insert(const value_type &amp;_Val) zur verfügung. Wie soll da der Key und die Daten rein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902776</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 14:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:38:53 GMT]]></title><description><![CDATA[<p>Schau mal auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nach, dort gibt es auch Anwendungsbeispiele. Die Seite ist ein gutes Nachschlagewerk zur Standardbibliothek.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902778</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 14:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 14:54:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Schau mal auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nach, dort gibt es auch Anwendungsbeispiele. Die Seite ist ein gutes Nachschlagewerk zur Standardbibliothek.</p>
</blockquote>
<p>Danke für den Link... habs gefunden.</p>
<p>Was ein wenig Konfus ist: Zeile 24,25<br />
<a href="http://www.cplusplus.com/reference/stl/map/insert/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/insert/</a></p>
<pre><code class="language-cpp">mymap.insert (it, pair&lt;char,int&gt;('b',300));  // max efficiency inserting
mymap.insert (it, pair&lt;char,int&gt;('c',400));  // no max efficiency inserting
</code></pre>
<p>Warum sollte das erste Verfahren effizient sein und das zweite nicht? da ändern sich doch nur die die Werte und nicht der Vorgang selbst?</p>
<p>Gibt es eine Möglichkeite ohne Pair auszukommen? Dieses first, second ist ein wenig ungewöhnlich. Bei coordinate[id] = wert wie in <a href="http://www.cplusplus.com/reference/stl/map/insert/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/insert/</a> ist es sehr bequem. Kann ich bei utm einfach einen leerden Default Konstruktor erstellen? Ist der Weg mit Pair der übliche? Wenn ja dann werde ich mich auch dran halten..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902784</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 14:54:32 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 15:05:25 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Warum sollte das erste Verfahren effizient sein und das zweite nicht? da ändern sich doch nur die die Werte und nicht der Vorgang selbst?</p>
</blockquote>
<p>Wenn du die Überladung</p>
<pre><code class="language-cpp">iterator insert ( iterator position, const value_type&amp; x );
</code></pre>
<p>nimmst, gibst du der Map einen Tipp, wo das Element einzufügen ist. Wenn der Tipp stimmt, entfällt daher die logarithmische Suche und du hast praktisch eine O(1)-Einfügung.</p>
<p>Aber im Allgemeinen solltest du die einparametrige Überladung von <code>insert()</code> benutzen:</p>
<pre><code class="language-cpp">pair&lt;iterator,bool&gt; insert ( const value_type&amp; x );
</code></pre>
<p>darkfate schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeite ohne Pair auszukommen?</p>
</blockquote>
<p>Nein, aber du kannst mit <code>std::make_pair()</code> die Typangabe weglassen, was vor allem bei komplexeren Typen Vorteile hat:</p>
<pre><code class="language-cpp">mymap.insert(pair&lt;char,int&gt;('b',300));
</code></pre>
<p>wird zu</p>
<pre><code class="language-cpp">mymap.insert(std::make_pair('b',300));
</code></pre>
<p>Wenn dir das immer noch zu mühsam ist, kannst du dir ja eine Funktion schreiben:</p>
<pre><code class="language-cpp">template &lt;typename Key, typename Mapped&gt;
void map_insert(std::map&lt;Key, Mapped&gt;&amp; map, const Key&amp; key, const Mapped&amp; mapped)
{
    map.insert(std::make_pair(key, mapped));
}
</code></pre>
<p>So kannst du z.B. auch eine Exception werfen, wenn ein Objekt bereits vorkommt. Oder einfach den Rückgabewert von <code>std::map::insert()</code> weiterleiten. Der Aufruf sieht so aus:</p>
<pre><code class="language-cpp">map_insert(mymap, 'b', 300);
</code></pre>
<p>darkfate schrieb:</p>
<blockquote>
<p>Kann ich bei utm einfach einen leerden Default Konstruktor erstellen? Ist der Weg mit Pair der übliche? Wenn ja dann werde ich mich auch dran halten..</p>
</blockquote>
<p>Ich würde nicht nur aufgrund der Einfügungssyntax von <code>std::map</code> einen Defaultkonstruktor bereitstellen. Dieser ist dann auch in anderen Situationen verfügbar, wo er unangebracht ist. Zum Beispiel wenn du vergisst, ein Member einer Klasse zu initialisieren: Mit Defaultkonstruktor erfährst du nichts, aber die Membervariable hat möglicherweise einen sinnlosen Wert (Logikfehler zur Laufzeit). Ohne Defaultkonstruktor hingegen erfährst du zur Kompilierzeit von dem Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902793</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 May 2010 15:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zeiger auf Map on Wed, 26 May 2010 15:10:46 GMT]]></title><description><![CDATA[<p>Super! Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902798</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Wed, 26 May 2010 15:10:46 GMT</pubDate></item></channel></rss>