<?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[Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Da ich bislang noch nicht mit Vectoren oder Containern gearbeitet habe, bräuchte ich einmal Anfänger Anschubhilfe für eine sicher einfache Aufgabe.</p>
<p>Gegeben ist folgendes Klassen Array:</p>
<p>class<br />
{<br />
public:<br />
double Laenge;<br />
int Num<br />
int Lage;<br />
} Teil[1];</p>
<p>1. Dem Array sollen später eine unterschiedliche Anzahl von Elementen hinten angefügt werden. Das Array soll sich dann automatisch vergrößern. Die maximale Größe des Arrays ist ca. Teil[30].<br />
2. Das Klassen Array soll dann nach Größe des Klassenelements &quot;Laenge&quot; sortiert werden.<br />
3. Löschen einzelner Elemente wird nicht benötigt.</p>
<p>Wie läßt sich die Aufgabe am einfachsten mit der C++ oder der C++ STL lösen?<br />
Das ganze sollte schnell sein, weil es oft ausgeführt wird.</p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326665/dynamisches-klassen-array-sortieren-mit-vectoren-oder-container-implementieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 07:01:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326665.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jun 2014 22:47:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Sun, 29 Jun 2014 22:53:52 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Da ich bislang noch nicht mit Vectoren oder Containern gearbeitet habe, bräuchte ich einmal Anfänger Anschubhilfe für eine sicher einfache Aufgabe.</p>
<p>Gegeben ist folgendes Klassen Array:</p>
<p>class<br />
{<br />
public:<br />
double Laenge;<br />
int Num<br />
int Lage;<br />
} Teil[1];</p>
<p>1. Dem Array sollen später eine unterschiedliche Anzahl von Elementen hinten angefügt werden. Das Array soll sich dann automatisch vergrößern. Die maximale Größe des Arrays ist ca. Teil[30].<br />
2. Das Klassen Array soll dann nach Größe des Klassenelements &quot;Laenge&quot; sortiert werden.<br />
3. Löschen einzelner Elemente wird nicht benötigt.</p>
<p>Wie läßt sich die Aufgabe am einfachsten mit der C++ oder der C++ STL lösen?<br />
Das ganze sollte schnell sein, weil es oft ausgeführt wird.</p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406255</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sun, 29 Jun 2014 22:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Sun, 29 Jun 2014 23:01:04 GMT]]></title><description><![CDATA[<pre><code>struct Data
{
    double Laenge;
    int Num
    int Lage;
}; 
Data d;
// [...]

std::vector&lt;Data&gt; vec; // benötigt den Header &lt;vector&gt;
vec.push_back({ 0.4, 7, 9 });
vec.push_back(d);
// [...] weitere Elemente mittels push_back hinten einfügen

// Sortieren - benötigt den Header &lt;algorithm&gt;
std::sort( std::begin(vec), std::end(vec), []( Data const&amp; lhs, Data const&amp; rhs ){ return lhs.Laenge &lt; rhs.Laenge; } );
// Alternativ: Eigenen Funktor implementieren
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406256</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 29 Jun 2014 23:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Sun, 29 Jun 2014 23:54:17 GMT]]></title><description><![CDATA[<p>Hallo Arcoth,</p>
<p>vielen Dank für die Antwort!</p>
<p>Bei der Lösung mit Vektoren hatte ich gleich mehrere Blackouts. Den Operator, als auch den Header &lt;algorithm&gt; hatte ich vergessen. Der Operator ist nun in der Klasse implementiert. Funktioniert super und ist genial einfach!</p>
<p>class Teil {<br />
public:<br />
double dLaenge;<br />
int nNum;<br />
int nLage;</p>
<p>bool operator &lt; (const Teil &amp; rhs) const { return dLaenge &lt; rhs.dLaenge; }<br />
};</p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406259</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sun, 29 Jun 2014 23:54:17 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 06:21:01 GMT]]></title><description><![CDATA[<p>Beim Versuch den Klassen Vector einmal nach &quot;dLaenge&quot; und ein anderes Mal nach &quot;nNum&quot; zu sortieren, komme ich nicht weiter:</p>
<p>#include &lt;vector&gt;<br />
#include &lt;algorithm&gt;</p>
<p>class Teil {<br />
public:<br />
double dLaenge;<br />
int nNum;<br />
int nLage;<br />
bool operator &lt; (const Teil &amp; rhs) const { return dLaenge &lt; rhs.dLaenge; }<br />
};</p>
<p>bool MyDataSortPredicate(const Teil&amp; lhs, const Teil&amp; rhs)<br />
{<br />
return lhs.nNum &lt; rhs.nNum;<br />
}</p>
<p>int main()<br />
{<br />
std::vector &lt;Teil&gt; MyTeil;<br />
MyTeil.push_back( { 1.1, 2, 3} );<br />
MyTeil.push_back( { 5.2, 5, 1} );<br />
MyTeil.push_back( { 4.1, 9, 4} );</p>
<p>// Funktioniert, es wird &quot;dLaenge&quot; sortiert<br />
std::sort(MyTeil.begin(), MyTeil.end());</p>
<p>// error C3867: Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie &quot;&amp;MyDataSortPredicate&quot;, um einen Zeiger auf den Member zu erstellen.<br />
std::sort(MyTeil.begin(), MyTeil.end(), MyDataSortPredicate);<br />
}</p>
<p>An der Stelle komme ich nicht weiter. Vielleicht ist der Weg aber eh falsch?</p>
<p>Wie kann mehr als ein Klassenelement sortiert werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406262</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Mon, 30 Jun 2014 06:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 05:32:43 GMT]]></title><description><![CDATA[<p>Ja, sort einen Functor geben, wie Arcoth ds gezeigt hat.<br />
Das ist einfach irgendeine Funktion mit der selben Signatur wie operator&lt;, aber man kann sie ja beliebig nennen.<br />
Er hat das jetzt mit einem Lambda, d.h. einer anonymen Funktion, gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406263</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 30 Jun 2014 05:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 05:41:13 GMT]]></title><description><![CDATA[<p>Das hat erst einmal mit vectoren übrigens nichts zu tun. std::sort kann alles sortieren, was irgendwie mit einem Index angesprochen werden kann. Und es kann dazu jedes beliebiger Kriterium benutzen, was du programmieren kannst. Es ist bloß die Standardvorgabe, dass nach dem Operator&lt; sortiert wird. Zur Auswahl des Sortierkriteriums dient der dritte Parameter.<br />
Referenzen mit Beispielen:<br />
<a href="http://www.cplusplus.com/reference/algorithm/sort" rel="nofollow">http://www.cplusplus.com/reference/algorithm/sort</a><br />
<a href="http://en.cppreference.com/w/cpp/algorithm/sort" rel="nofollow">http://en.cppreference.com/w/cpp/algorithm/sort</a><br />
Wie du siehst, ist selbst die Art, wie das Sortierkriterium übergeben wird offen gehalten, es muss bloß irgendetwas sein, was zwei der zu sortierenden Objekte nehmen kann und dann einen Wahrheitswert zurück gibt, ob das erste Element &quot;kleiner&quot; ist als das zweite (wobei man frei wählen kann, was &quot;kleiner&quot; bedeuten soll). Das können freie Funktionen, Memberfunktionen, Funktoren (funktionsartige Objekte) oder Lambda-Ausdrücke sein (eine Art Minifunktor).</p>
<p>mireiner schrieb:</p>
<blockquote>
<pre><code>bool operator &lt; (const Teil &amp; rhs) const { return dLaenge &lt; rhs.dLaenge; }
bool operator &lt; (const Teil &amp; rhs) const { return nNum &lt; rhs.nNum; }
</code></pre>
<p>...</p>
<p>Der Operator wird aber vermutlich nur einmal überladen werden können, oder?</p>
</blockquote>
<p>&quot;Überladung&quot; heißt, dass man eine Funktion mehrmals definiert, aber mit anderen Parametern. Das heißt, man kann schon einen Operator mehrmals überladen, die erste Überladung ist ja naturgemäß bereits eine weitere Definition einer Funktion, die es längst gibt (hier: Der normale Operator&lt; zum Vergleich von Zahlen). Operatoren sind auch nur ganz normale Funktionen mit Syntaxzucker.<br />
Mit diesem Wissen sollte klar sein, dass dein Code so nicht gehen kann, denn das ist ja eine mehrfache Definition ein und der selben Funktion, eines Operators&lt;, der ein Member von Teil ist und rechtsseitig ein const Teil&amp; nimmt. Funktionen darf man aber nicht mehrfach definieren. Wie sollten sie auch unterschieden werden? Was würdest du dir vorstellen, welche Variante bei einem Aufruf genommen wird? Normalerweise würde dies anhand der Parameter entschieden, aber hier wäre ja alles gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406264</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 Jun 2014 05:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 06:41:04 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>danke für die Antworten, die sich mit meinem geänderten Posting wohl überschnitten haben. Ich habe es jetzt so hinbekommen:</p>
<p>class Teil<br />
public:<br />
double Laenge<br />
int Num;<br />
int Lage;<br />
};</p>
<p>int main()<br />
{<br />
std::vector &lt;Teil&gt; MyTeil;</p>
<p>MyTeil.push_back({...});<br />
MyTeil.push_back({...});<br />
....</p>
<p>// Sortiert nach &quot;Laenge&quot;<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), [](Teil const&amp; lhs, Teil const&amp; rhs){ return lhs.Laenge &lt; rhs.Laenge; });</p>
<p>// Sortiert nach &quot;Num&quot;<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), [](Teil const&amp; lhs, Teil const&amp; rhs){ return lhs.nNum &lt; rhs.nNum; });<br />
}</p>
<p>Wie läßt sich der functor in die Klasse integrieren? So dass folgender Aufruf genügt:<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), functor);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406268</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Mon, 30 Jun 2014 06:41:04 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 06:56:30 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Wie läßt sich der functor in die Klasse integrieren? So dass folgender Aufruf genügt:<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), functor);</p>
</blockquote>
<p>Du hast doch gar keinen Funktor, bist du sicher, dass du wirklich willst, wonach du fragst? Das sind doch quasi freie Funktionen, ohne inneren Zustand, und das ist auch passend so. Mach eventuell eine statische Klassenmethode daraus, wenn du es unbedingt als Teil deiner Klasse haben möchtest. Das geht dann immer noch so, wie bei einer freien Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406269</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 Jun 2014 06:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 06:58:39 GMT]]></title><description><![CDATA[<p>Gar nicht.<br />
Statt das <code>sort</code> nach jedem Ändern des <code>vector</code> explizit aufrufen zu müssen, nimm besser <code>set</code> . Dort kannst du gleich bei der Definition deine Vergleichsfunktion angeben, <code>set</code> sortiert damit immer aufsteigend.<br />
Der gesamte Inhalt ist nach jedem Ändern des <code>set</code> ( <code>insert</code> , <code>erase</code> ) sofort automatisch sortiert, und somit natürlich viel angenehmer als das <code>vector</code> / <code>sort</code> Gefrickel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406270</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Mon, 30 Jun 2014 06:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Klassen Array sortieren: Mit Vectoren oder Container implementieren? on Mon, 30 Jun 2014 07:02:25 GMT]]></title><description><![CDATA[<p>Habs jetzt hinbekommen:</p>
<p>class Teil<br />
public:<br />
double Laenge<br />
int Num;<br />
int Lage;<br />
};</p>
<p>struct cmpL{<br />
bool operator()(const psort &amp;a, const psort &amp;b){return (a.dLaenge &lt; b.dLaenge);}<br />
} compareLaenge;</p>
<p>struct cmpN{<br />
bool operator()(const psort &amp;a, const psort &amp;b){return (a.nNum &lt; b.nNum);}<br />
} compareNum;</p>
<p>int main()<br />
{<br />
std::vector &lt;Teil&gt; MyTeil;</p>
<p>MyTeil.push_back({...});<br />
MyTeil.push_back({...});<br />
....</p>
<p>// Sortiert nach &quot;Laenge&quot;<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), compareLaenge);</p>
<p>// Sortiert nach &quot;Num&quot;<br />
std::sort(std::begin(MyTeil), std::end(MyTeil), compareNum);</p>
<p>Vielen Dank an alle!</p>
<p>P.S.: Das &quot;set&quot; werde ich mir auch einmal anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406271</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Mon, 30 Jun 2014 07:02:25 GMT</pubDate></item></channel></rss>