<?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[sort macht nicht, was es soll]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wende gerade die sort-Funktion der STL an, aber leider klappt es nicht so, wie ich mir das vorstelle. Und zwar möchte ich einen Vektor sortieren, der aus Variablen vom Typ std::pair&lt;int,int&gt; besteht. Wenn ich jetzt schreibe:</p>
<pre><code class="language-cpp">std::sort(MyVector.begin(),MyVector.end());
</code></pre>
<p>dann sind am Ende die Werte für first der Größe nach geordnet und die der second-Werte auch. Also in etwa so:</p>
<blockquote>
<p>123 3<br />
123 4<br />
123 5<br />
124 4<br />
124 5<br />
124 6<br />
125 5 ....</p>
</blockquote>
<p>Wenn ich jetzt aber nach den second-Werten sortieren möchte, dann muss ich ja meine eigene Funktion schreiben, die ich dem Sortieralgorithmus übergebe. Das habe ich wie folgt gemacht:</p>
<pre><code class="language-cpp">std::sort(MyVector.begin(),MyVector.end(),SortValY);
//...
bool SortValY (MyPairInt &amp;a, MyPairInt &amp;b)
{
  return a.second &lt; b.second;
}
</code></pre>
<p>Aber leider funktioniert das nicht. Die second-Werte sind der Reihenfolge nach geordnet, aber die first-Werte nicht. Ergebnis sieht wie folgt aus:</p>
<blockquote>
<p>124 3<br />
125 4<br />
124 4<br />
126 4<br />
124 5<br />
126 5<br />
125 5 ....</p>
</blockquote>
<p>Wie muss ich meine SortValY-Funktion ändern, dass die first-Werte auch geordnet werden?<br />
DANKE!<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236633/sort-macht-nicht-was-es-soll</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 19:31:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236633.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Mar 2009 20:30:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sort macht nicht, was es soll on Tue, 17 Mar 2009 20:30:42 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wende gerade die sort-Funktion der STL an, aber leider klappt es nicht so, wie ich mir das vorstelle. Und zwar möchte ich einen Vektor sortieren, der aus Variablen vom Typ std::pair&lt;int,int&gt; besteht. Wenn ich jetzt schreibe:</p>
<pre><code class="language-cpp">std::sort(MyVector.begin(),MyVector.end());
</code></pre>
<p>dann sind am Ende die Werte für first der Größe nach geordnet und die der second-Werte auch. Also in etwa so:</p>
<blockquote>
<p>123 3<br />
123 4<br />
123 5<br />
124 4<br />
124 5<br />
124 6<br />
125 5 ....</p>
</blockquote>
<p>Wenn ich jetzt aber nach den second-Werten sortieren möchte, dann muss ich ja meine eigene Funktion schreiben, die ich dem Sortieralgorithmus übergebe. Das habe ich wie folgt gemacht:</p>
<pre><code class="language-cpp">std::sort(MyVector.begin(),MyVector.end(),SortValY);
//...
bool SortValY (MyPairInt &amp;a, MyPairInt &amp;b)
{
  return a.second &lt; b.second;
}
</code></pre>
<p>Aber leider funktioniert das nicht. Die second-Werte sind der Reihenfolge nach geordnet, aber die first-Werte nicht. Ergebnis sieht wie folgt aus:</p>
<blockquote>
<p>124 3<br />
125 4<br />
124 4<br />
126 4<br />
124 5<br />
126 5<br />
125 5 ....</p>
</blockquote>
<p>Wie muss ich meine SortValY-Funktion ändern, dass die first-Werte auch geordnet werden?<br />
DANKE!<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681814</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Tue, 17 Mar 2009 20:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to sort macht nicht, was es soll on Tue, 17 Mar 2009 20:40:20 GMT]]></title><description><![CDATA[<p>VerbalKint schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::sort(MyVector.begin(),MyVector.end(),SortValY);
//...
bool SortValY (MyPairInt &amp;a, MyPairInt &amp;b)
{
  return a.second &lt; b.second;
}
</code></pre>
</blockquote>
<p>meine idee:<br />
zuerst überprüfen ob die second-werte gleich sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /><br />
wenn ja: die erste spalte berücksichtigen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681816</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 17 Mar 2009 20:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to sort macht nicht, was es soll on Tue, 17 Mar 2009 20:40:35 GMT]]></title><description><![CDATA[<p>Du musst eben eine Bedingung schreiben, die zuerst nach <code>second</code> und anschliessend nach <code>first</code> ordnet. Zum Beispiel so:</p>
<pre><code class="language-cpp">bool SortSecond(const MyPairInt&amp; Left, const MyPairInt&amp; Right) // Const-Referenzen!
{
    if (Left.second == Right.second)
        return Left.first &lt; Right.first;
    else
        return Left.second &lt; Right.second;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1681817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681817</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 17 Mar 2009 20:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to sort macht nicht, was es soll on Tue, 17 Mar 2009 20:47:03 GMT]]></title><description><![CDATA[<p>Hat funktioniert, vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681822</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Tue, 17 Mar 2009 20:47:03 GMT</pubDate></item></channel></rss>