<?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[Vector mit Zeigern auf Objekte sortieren..]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Vector, welcher mit Objekten befüllt wird</p>
<pre><code>vector&lt;Datum*&gt; *_vd = new vector&lt;Datum*&gt;;

    _vd-&gt;push_back(new Datum(2030, 1, 1));
    _vd-&gt;push_back(new Datum(2011, 12, 12));
    _vd-&gt;push_back(new Datum(2011, 12, 13));
    _vd-&gt;push_back(new Datum(2011, 12, 14));
    _vd-&gt;push_back(new Datum(2010, 12, 18));
</code></pre>
<p>Diesen Vector möchte ich sortieren, dafür habe ich den Operator&lt; überladen</p>
<pre><code>bool operator&lt;(const Datum &amp;orig)const{
    cout &lt;&lt; &quot;operatornutzung!!&quot; &lt;&lt; endl ;
    if(orig._year&gt;this-&gt;_year)return true;
    if(this-&gt;_year&gt;orig._year)return false;
    if(orig._month&gt;this-&gt;_month)return true;
    if(this-&gt;_month&gt;orig._month)return false;
    if(orig._day&gt;this-&gt;_day)return true;
    if(this-&gt;_day&gt;orig._day)return false;
    else
        return false;
}
</code></pre>
<p>nun möchte ich den Vector Sortieren</p>
<pre><code>sort(*(_vd)-&gt;begin(), *(_vd)-&gt;end());
</code></pre>
<p>er ruft den überladenen Operator dann tausendfach auf und hängt sich auf..</p>
<p>was mache ich verkehrt.</p>
<p>(wird der Vector mit objekten ohne new befüllt, funktioniert das Sortieren mit</p>
<pre><code>sort(_v.begin(), _v.end());
</code></pre>
<p>tadellos..</p>
<p>vllt. hat ja jemand eine Idee..</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327105/vector-mit-zeigern-auf-objekte-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 21:28:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327105.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jul 2014 18:31:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector mit Zeigern auf Objekte sortieren.. on Wed, 23 Jul 2014 18:31:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Vector, welcher mit Objekten befüllt wird</p>
<pre><code>vector&lt;Datum*&gt; *_vd = new vector&lt;Datum*&gt;;

    _vd-&gt;push_back(new Datum(2030, 1, 1));
    _vd-&gt;push_back(new Datum(2011, 12, 12));
    _vd-&gt;push_back(new Datum(2011, 12, 13));
    _vd-&gt;push_back(new Datum(2011, 12, 14));
    _vd-&gt;push_back(new Datum(2010, 12, 18));
</code></pre>
<p>Diesen Vector möchte ich sortieren, dafür habe ich den Operator&lt; überladen</p>
<pre><code>bool operator&lt;(const Datum &amp;orig)const{
    cout &lt;&lt; &quot;operatornutzung!!&quot; &lt;&lt; endl ;
    if(orig._year&gt;this-&gt;_year)return true;
    if(this-&gt;_year&gt;orig._year)return false;
    if(orig._month&gt;this-&gt;_month)return true;
    if(this-&gt;_month&gt;orig._month)return false;
    if(orig._day&gt;this-&gt;_day)return true;
    if(this-&gt;_day&gt;orig._day)return false;
    else
        return false;
}
</code></pre>
<p>nun möchte ich den Vector Sortieren</p>
<pre><code>sort(*(_vd)-&gt;begin(), *(_vd)-&gt;end());
</code></pre>
<p>er ruft den überladenen Operator dann tausendfach auf und hängt sich auf..</p>
<p>was mache ich verkehrt.</p>
<p>(wird der Vector mit objekten ohne new befüllt, funktioniert das Sortieren mit</p>
<pre><code>sort(_v.begin(), _v.end());
</code></pre>
<p>tadellos..</p>
<p>vllt. hat ja jemand eine Idee..</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410141</guid><dc:creator><![CDATA[Dany303]]></dc:creator><pubDate>Wed, 23 Jul 2014 18:31:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vector mit Zeigern auf Objekte sortieren.. on Wed, 23 Jul 2014 18:41:27 GMT]]></title><description><![CDATA[<p>Du musst eine Sortierfunktion für die Zeiger schreiben und diese als drittes Argument an sort übergeben. Wie das mit dem dritten Argument für sort funktioniert, sollte in jeder guten Referenz auf gleich mehrere Arten vorgemacht werden.</p>
<p>Warum speicherst du überhaupt Zeiger auf Datum, anstatt direkt ein Datum? Und Zeiger auf einen Vektor? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Das macht ja mal gar keinen Sinn!<br />
Ich glaube, das Problem ist viel eher, dass du gerade Java in C++ machst. In C++ brauchst du so gut wie nie ein explizites new. Lass all die Zeiger weg und all die new, dann löst sich dein Problem ganz von alleine. Zudem wird dein Programm automatisch schneller und weniger fehleranfällig (da du derzeit mit rohen Zeigern hantierst, kann es gar nicht korrekt sein, wenn man Exceptions beachtet). Da dies eine wesentlich bessere Lösung ist als den sort-Aufruf zu korrigieren (der würde dadurch auch automatisch korrekt, ohne dass du ein drittes Argument brauchst), mache ich das geänderte sort bewusst nicht vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410143</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 23 Jul 2014 18:41:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vector mit Zeigern auf Objekte sortieren.. on Wed, 23 Jul 2014 18:49:46 GMT]]></title><description><![CDATA[<p>Dany303 schrieb:</p>
<blockquote>
<pre><code>sort(*(_vd)-&gt;begin(), *(_vd)-&gt;end());
</code></pre>
</blockquote>
<p>Die Sternchen gehören dort nicht hin. sort vergleicht Objekte vom Typ Datum *, nicht Datum. Daher kann dein Operator so nicht angewendet werden. Richtiger wäre sowas hier:</p>
<pre><code>sort(begin(*_vd), end(*_vd), [](const Datum *lhs, const Datum *rhs){ return *lhs &lt; *rhs; });
</code></pre>
<p>Dein Vergleich geht auch schöner:</p>
<pre><code>bool operator &lt; (const Datum &amp;lhs, const Datum &amp;rhs) const{
    cout &lt;&lt; &quot;operatornutzung!!&quot; &lt;&lt; '\n';
    return std::tie(lhs._year, lhs._month, lhs._day) &lt; std::tie(rhs._year, rhs._month, rhs._day);
}
</code></pre>
<p>Und was Sepp gesagt hat (sorry fürs vormachen): Wenn dein Code das Keyword new enthält dann ist er falsch. Es gibt da ein paar Ausnahmen, aber die sind erstmal nicht wichtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410145</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 23 Jul 2014 18:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vector mit Zeigern auf Objekte sortieren.. on Wed, 23 Jul 2014 19:23:13 GMT]]></title><description><![CDATA[<p>okay.</p>
<p>tie :o</p>
<p>Danke für die schnelle Antwort :-&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410150</guid><dc:creator><![CDATA[Dany303]]></dc:creator><pubDate>Wed, 23 Jul 2014 19:23:13 GMT</pubDate></item></channel></rss>