<?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[Problem mit std::sort Funktion]]></title><description><![CDATA[<p>Hi Folks,</p>
<p>ich habe ein Problem beim Sortieren einer std::list. Sinngemäß sieht mein Code so aus:</p>
<pre><code class="language-cpp">#define ABWEICHUNG 0.001f

class vector3d {
    public:
        vector3d() : X(0), Y(0), Z(0) {}
        vector3d(float X_, float Y_, float Z_) { X = X_; Y = Y_; Z = Z_; }
        float X, Y, Z;
};

bool cmp(vector3d &amp;Pos1, vector3d &amp;Pos2) {
    return Pos1.X &gt; Pos2.X - ABWEICHUNG &amp;&amp; Pos1.X &lt; Pos2.X + ABWEICHUNG &amp;&amp;
           Pos1.Y &gt; Pos2.Y - ABWEICHUNG &amp;&amp; Pos1.Y &lt; Pos2.Y + ABWEICHUNG &amp;&amp;
           Pos1.Z &gt; Pos2.Z - ABWEICHUNG &amp;&amp; Pos1.Z &lt; Pos2.Z + ABWEICHUNG;
}

std::list&lt;vector3d&gt; KoordinatenListe;

KoordinatenListe.push_back( vector3d(1, 2, 3) );
KoordinatenListe.push_back( vector3d(0, 0, 0) );
KoordinatenListe.push_back( vector3d(3, 4, 4) );
KoordinatenListe.push_back( vector3d(0, 0, 0) );
KoordinatenListe.push_back( vector3d(7, 8, 3) );
KoordinatenListe.push_back( vector3d(1, 2, 3) );
KoordinatenListe.push_back( vector3d(3, 4, 4) );

KoordinatenListe.sort( cmp );

/*
So sollte es nach dem Sortieren EIGENTLICH sortiert sein:

1, 2, 3
1, 2, 3
0, 0, 0
0, 0, 0
3, 4, 4
3, 4, 4
7, 8, 3

Ob insgesammt aufsteigend oder nicht ist egal, wichtig ist nur dass alle
gleichen (bzw. mit einer Abweichung von 'ABWEICHUNG') Koordinaten HINTEREINANDER stehen!
*/
</code></pre>
<p>Wie bekomme ich das hin? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209595/problem-mit-std-sort-funktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 20:17:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209595.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Apr 2008 12:36:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit std::sort Funktion on Tue, 01 Apr 2008 12:37:21 GMT]]></title><description><![CDATA[<p>Hi Folks,</p>
<p>ich habe ein Problem beim Sortieren einer std::list. Sinngemäß sieht mein Code so aus:</p>
<pre><code class="language-cpp">#define ABWEICHUNG 0.001f

class vector3d {
    public:
        vector3d() : X(0), Y(0), Z(0) {}
        vector3d(float X_, float Y_, float Z_) { X = X_; Y = Y_; Z = Z_; }
        float X, Y, Z;
};

bool cmp(vector3d &amp;Pos1, vector3d &amp;Pos2) {
    return Pos1.X &gt; Pos2.X - ABWEICHUNG &amp;&amp; Pos1.X &lt; Pos2.X + ABWEICHUNG &amp;&amp;
           Pos1.Y &gt; Pos2.Y - ABWEICHUNG &amp;&amp; Pos1.Y &lt; Pos2.Y + ABWEICHUNG &amp;&amp;
           Pos1.Z &gt; Pos2.Z - ABWEICHUNG &amp;&amp; Pos1.Z &lt; Pos2.Z + ABWEICHUNG;
}

std::list&lt;vector3d&gt; KoordinatenListe;

KoordinatenListe.push_back( vector3d(1, 2, 3) );
KoordinatenListe.push_back( vector3d(0, 0, 0) );
KoordinatenListe.push_back( vector3d(3, 4, 4) );
KoordinatenListe.push_back( vector3d(0, 0, 0) );
KoordinatenListe.push_back( vector3d(7, 8, 3) );
KoordinatenListe.push_back( vector3d(1, 2, 3) );
KoordinatenListe.push_back( vector3d(3, 4, 4) );

KoordinatenListe.sort( cmp );

/*
So sollte es nach dem Sortieren EIGENTLICH sortiert sein:

1, 2, 3
1, 2, 3
0, 0, 0
0, 0, 0
3, 4, 4
3, 4, 4
7, 8, 3

Ob insgesammt aufsteigend oder nicht ist egal, wichtig ist nur dass alle
gleichen (bzw. mit einer Abweichung von 'ABWEICHUNG') Koordinaten HINTEREINANDER stehen!
*/
</code></pre>
<p>Wie bekomme ich das hin? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484451</guid><dc:creator><![CDATA[LukasBanana]]></dc:creator><pubDate>Tue, 01 Apr 2008 12:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::sort Funktion on Tue, 01 Apr 2008 16:06:23 GMT]]></title><description><![CDATA[<p>Du mußt die cmp-Funktion so programmieren, daß sie einem &quot;logisch kleiner&quot; entspricht (nicht einem &quot;logisch gleich&quot;):</p>
<pre><code class="language-cpp">return pos.X &lt; pos2.X || (pos.X == pos2.X &amp;&amp; (pos.Y &lt; pos2.Y ||
                         (pos.Y == pos2.Y &amp;&amp; pos.Z &lt; pos2.Z)));
</code></pre>
<p>ich hoffe, ich hab mich jetzt nicht bei der Klammerung vertan...</p>
<p>Das mit der Abweichung verstehe ich nicht so ganz, was du meinst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484625</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 01 Apr 2008 16:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::sort Funktion on Tue, 01 Apr 2008 16:31:22 GMT]]></title><description><![CDATA[<p>Soll das bedeuten dass man bei der 'VergleichsFunktion' nur '&lt;' verwenden kann und nicht '&gt;' oder '==' etc.?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484642</guid><dc:creator><![CDATA[LukasBanana]]></dc:creator><pubDate>Tue, 01 Apr 2008 16:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::sort Funktion on Tue, 01 Apr 2008 16:54:27 GMT]]></title><description><![CDATA[<p>LukasBanana schrieb:</p>
<blockquote>
<p>Soll das bedeuten dass man bei der 'VergleichsFunktion' nur '&lt;' verwenden kann und nicht '&gt;' oder '==' etc.?</p>
</blockquote>
<p>Die kannst du immer gebrauchen, sofern sie Sinn machen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484660</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 01 Apr 2008 16:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::sort Funktion on Tue, 01 Apr 2008 17:28:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a>: Vielen Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Hat wunderbar funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484692</guid><dc:creator><![CDATA[LukasBanana]]></dc:creator><pubDate>Tue, 01 Apr 2008 17:28:29 GMT</pubDate></item></channel></rss>