<?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[Datentyp map - Elemente mit Schlüssel durchlaufen]]></title><description><![CDATA[<p>Guten Morgen zusammen,</p>
<p>ich habe folgnde Aufgabenstellung:</p>
<p>Ich soll in einer Klasse eine map definieren, die aus zwei eigenen Datentypen besteht. Der eine Datentyp ist eine Art Auftrag (ebenfalls mit Namen Auftrag), der aus Auftragsnummer, Auftragsdatum, etc. besteht.<br />
Der andere Datentyp soll der Schlüssel für die map werden, die Klasse soll Auftragskey heißen.</p>
<p>Am Ende sollen zwei maps miteinander verglichen werden und immer wenn der Schlüssel der ersten map mit dem Schlüssel der zweiten map gleich ist, soll etwas bestimmtes passieren. Was ist eigentlich für meine Frage irrelevant.</p>
<p>Wenn ich nun die map definiere, müsste sie ja so aussehen:</p>
<p>map &lt;Auftragskey, Auftrag&gt; auftraege;</p>
<p>Der Schlüssel soll nun aus den Elementen Auftragsdatum, Auftragsnummer und Filialnummer der Klasse Auftrag bestehen. Jedesmal wenn diese 3 gleich sind, soll etwas passieren.</p>
<p>Was muss da in die Auftragskey-Klasse rein?<br />
Muss man die Klassen da irgendwie ableiten dafür oder wie geht man bei einer map vor?</p>
<p>Danke im Voraus.</p>
<p>Habe das bis jetzt mit vectoren gemacht, aber mein Prof meinte ich solle mir mal den Datentyp map anschauen, da dann alles schneller/effizienter läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272735/datentyp-map-elemente-mit-schlüssel-durchlaufen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:31:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272735.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Aug 2010 06:27:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 06:27:16 GMT]]></title><description><![CDATA[<p>Guten Morgen zusammen,</p>
<p>ich habe folgnde Aufgabenstellung:</p>
<p>Ich soll in einer Klasse eine map definieren, die aus zwei eigenen Datentypen besteht. Der eine Datentyp ist eine Art Auftrag (ebenfalls mit Namen Auftrag), der aus Auftragsnummer, Auftragsdatum, etc. besteht.<br />
Der andere Datentyp soll der Schlüssel für die map werden, die Klasse soll Auftragskey heißen.</p>
<p>Am Ende sollen zwei maps miteinander verglichen werden und immer wenn der Schlüssel der ersten map mit dem Schlüssel der zweiten map gleich ist, soll etwas bestimmtes passieren. Was ist eigentlich für meine Frage irrelevant.</p>
<p>Wenn ich nun die map definiere, müsste sie ja so aussehen:</p>
<p>map &lt;Auftragskey, Auftrag&gt; auftraege;</p>
<p>Der Schlüssel soll nun aus den Elementen Auftragsdatum, Auftragsnummer und Filialnummer der Klasse Auftrag bestehen. Jedesmal wenn diese 3 gleich sind, soll etwas passieren.</p>
<p>Was muss da in die Auftragskey-Klasse rein?<br />
Muss man die Klassen da irgendwie ableiten dafür oder wie geht man bei einer map vor?</p>
<p>Danke im Voraus.</p>
<p>Habe das bis jetzt mit vectoren gemacht, aber mein Prof meinte ich solle mir mal den Datentyp map anschauen, da dann alles schneller/effizienter läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943650</guid><dc:creator><![CDATA[Habit]]></dc:creator><pubDate>Tue, 24 Aug 2010 06:27:16 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 06:59:17 GMT]]></title><description><![CDATA[<p>In einer normalen Map müssen keys ja einzigartig sein, das heißt mit find() hast d udein Problem schon gelöst.</p>
<p>map&lt;key,wert&gt;::iterator it</p>
<p>for(it = mymap.begin(); it != mymap.end(); ++it)<br />
{<br />
// first key, second wert<br />
if(yourmap.find(it-&gt;first) != mymap.end())<br />
{<br />
// something special<br />
}<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943659</guid><dc:creator><![CDATA[MapMan]]></dc:creator><pubDate>Tue, 24 Aug 2010 06:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 07:02:24 GMT]]></title><description><![CDATA[<p>im Vergleich gehört natürlich yourmap und nicht mymap rein nach dem Ungleich.</p>
<p>Eventuell noch den Gleichheitsoperator überladen wenn es nicht so geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943660</guid><dc:creator><![CDATA[MapMansAssistent]]></dc:creator><pubDate>Tue, 24 Aug 2010 07:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 07:05:45 GMT]]></title><description><![CDATA[<p>Und was macht das jetzt genau?<br />
Es soll ja trotzdem Element X aus Map1 in Map2 gesucht werden.</p>
<p>Wieso überhaupt die Idee mit der Auftragskey-Klasse.</p>
<p>Meine Auftragsklasse enthält noch mehrere Member.<br />
Unter anderem Name, Geburtstag usw.</p>
<p>Aber nur wenn Auftragsdatum, Auftragsnummer und Fililanummer gleich sind soll etwas passieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943662</guid><dc:creator><![CDATA[Habit]]></dc:creator><pubDate>Tue, 24 Aug 2010 07:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 07:33:35 GMT]]></title><description><![CDATA[<p>OK, dank MapMansAssistent habe ich das verstanden.<br />
Aber wenn ich die Auftragskey-Klasse nun nicht mehr brauche, wie ist dann mein zweiter Datentyp für die map?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943670</guid><dc:creator><![CDATA[Habit]]></dc:creator><pubDate>Tue, 24 Aug 2010 07:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Tue, 24 Aug 2010 11:16:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Meine Auftragsklasse enthält noch mehrere Member.<br />
Unter anderem Name, Geburtstag usw.</p>
</blockquote>
<p>hm ... Keine Ahnung wie du das mit der Keyklasse handhabst doch die Keyklasse sollte das ganze Zusatzzeugs doch nicht enthalten, er dieht ja nur der Identifizierung (?)</p>
<p>Ansonsten wie gesagt den Gleichheitsoperator überladen und eben nur auf die relevanten Elemente prüfen.</p>
<p>Wenn du die Keyklasse nicht mehr brauchst dann löscht du die eben, wenn du den Key aus der Map löchst wird der Wert mitgelöscht. Ist das Ding dynamisch angelegt solltets du die Wertklasse erst einmal freigeben bevor du löchst.</p>
<pre><code class="language-cpp">if(map.find(key) != map.end())
   {
      // (je nachdem) delete map.find(key)-&gt;second;
      map.erase(map.find(key));
   }
</code></pre>
<p>Aber ganz im Allgemeinen finde ich es ein bischen komisch das man eine keyklasse bastelt welche einfach nur ein paar weitere Werte aus der Wertklasse speichert. Wenn du das mit vectoren hinbekommen hast kannst du direkt bei denen bleiben für diese Aufgabe.<br />
Dort gibt es auch find, erase und die Möglichkeit sequentiell mit Iteratoren durchzulaufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1943751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1943751</guid><dc:creator><![CDATA[MapMan]]></dc:creator><pubDate>Tue, 24 Aug 2010 11:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp map - Elemente mit Schlüssel durchlaufen on Wed, 25 Aug 2010 07:42:15 GMT]]></title><description><![CDATA[<p>Meine Auftragsklasse sieht so aus:</p>
<pre><code class="language-cpp">class Auftrag
{
	friend class Auftragsliste;

	private:
		int filialnummer;
		int auftragsnummer;
		string auftragsdatum;
		string name;
		string vorname;
		string geburtsdatum;
		string strasse;

	public:a
		Auftrag(string s); // 1. Konstruktor, zerpflückt einzelne Zeilen der Datei und speichert sie in den Membern
		Auftrag(const Auftrag &amp;vorher, const Auftrag &amp;nachher); // 2. Konstruktor, 
		~Auftrag();

		void readLine(string s); // Liest eine Zeile ein (wird von 1. Konstruktor aufgerufen)
		operator== (const Auftrag &amp;a); // Vergleicht ein Auftragselement mit einem zweiten übergebenen 
};
</code></pre>
<p>Die Auftragslistenklasse so:</p>
<pre><code class="language-cpp">class Auftragsliste
{
	private:
		vector&lt;Auftrag*&gt; auftraege;

	public:
		Auftragsliste(string filename); // 1. Konstruktor, liest Listen ein und schickt sie Richtung Auftrags-Klasse
		Auftragsliste(); // 2. Konstruktor
		~Auftragsliste();

		void readFile(string filename); // wird durch den 1. Konstruktor aufgerufen
		void compare(const Auftragsliste &amp;vorher, const Auftragsliste &amp;nachher); // wird aus 'main()' aufgerufen
		void write(); // wird aus 'main()' aufgerufen
};
</code></pre>
<p>Bis jetzt habe ich die beiden Vektoren in einer geschachtelten for-Schleife verglichen. Wenn Filialnummer, Auftragsnummer und Auftragsdatum gleich sind, wird noch überprüft, ob der Name ungleich ist. Stimmt dies, werden beide miteinander verglichenen Aufträge in eine Datei geschrieben.</p>
<p>Ich hoffe mal, es ist jetzt etwas verständlicher.<br />
Mit 'find()' kann man ja bloß einen &quot;kompletten&quot; Auftrag suchen, ich suche aber nur nach Übereinstimmung der obengenannten Variablen und nach NICHTÜBEREINSTIMMUNG des Namen.</p>
<p>Dafür irgendwelche Ideen?</p>
<p>Es funktioniert zwar alles, mein Problem ist nur die übertrieben lange Laufzeit bei mehr als 70.000 Elementen pro Vektor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1944103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1944103</guid><dc:creator><![CDATA[Habit]]></dc:creator><pubDate>Wed, 25 Aug 2010 07:42:15 GMT</pubDate></item></channel></rss>