<?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[std::list sort range?]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie sortiert man eigentlich eine std::list nur innerhalb einer bestimmten range?<br />
Ich möchte zB. nur von Element 5 - 15 sortieren, 0 - 4 und 16 - 20 aber auslassen.</p>
<p><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>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332190/std-list-sort-range</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 10:57:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332190.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Apr 2015 22:26:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 22:26:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie sortiert man eigentlich eine std::list nur innerhalb einer bestimmten range?<br />
Ich möchte zB. nur von Element 5 - 15 sortieren, 0 - 4 und 16 - 20 aber auslassen.</p>
<p><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>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450222</guid><dc:creator><![CDATA[!Hansi]]></dc:creator><pubDate>Tue, 14 Apr 2015 22:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 22:35:57 GMT]]></title><description><![CDATA[<pre><code>std::sort(std::next(std::begin(li), 5), std::next(std::begin(li), 16));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2450223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450223</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 14 Apr 2015 22:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 22:57:15 GMT]]></title><description><![CDATA[<p>Okay, danke.<br />
Aber so wird aus einem InputIterator ein ForwardIterator.</p>
<p>Man sollte dann die Requirements hier <a href="http://en.cppreference.com/w/cpp/concept/ForwardIterator" rel="nofollow">http://en.cppreference.com/w/cpp/concept/ForwardIterator</a> beachten, oder verstehe ich da was falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450228</guid><dc:creator><![CDATA[!Hansi]]></dc:creator><pubDate>Tue, 14 Apr 2015 22:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 23:03:05 GMT]]></title><description><![CDATA[<p>Hmm, gibt's ne Möglichkeit, das mit nem Lambda aufzurufen?</p>
<p>Denn:<br />
binary '-' : no operator found which takes a left-hand operand of type 'std::_List_iterator&lt;...<br />
void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)' : expects 4 arguments - 3 provided</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450229</guid><dc:creator><![CDATA[!Hansi]]></dc:creator><pubDate>Tue, 14 Apr 2015 23:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 23:12:11 GMT]]></title><description><![CDATA[<p>Du kannst die Elemente auch in eine neue <code>list</code> spleissen, diese sortieren (mit <code>list::sort()</code> ), und dann wieder in die Originalliste einflechten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450231</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 14 Apr 2015 23:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 23:12:32 GMT]]></title><description><![CDATA[<p>Ups, lol. So natürlich nicht. Vergesse jedes mal das <code>sort</code>  <code>RandomAccessIterators</code> erwartet.</p>
<p>Dann trenne doch den Teil der Liste den du sortieren möchtest in eine neue Liste, sortiere diese mittels der Memberfunktion und füge sie wieder in die ursprüngliche Liste ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450232</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 14 Apr 2015 23:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Tue, 14 Apr 2015 23:21:27 GMT]]></title><description><![CDATA[<p>Ja, das dachte ich mir auch schon.<br />
Wollte es nur einfacher haben, aber wenn das nicht geht..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450233</guid><dc:creator><![CDATA[!Hansi]]></dc:creator><pubDate>Tue, 14 Apr 2015 23:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 00:26:27 GMT]]></title><description><![CDATA[<p>Selbst wenn es mit <code>std::sort</code> ginge wäre <code>splice</code> + <code>list::sort</code> besser, und zwar wegen...</p>
<p><a href="http://www.cplusplus.com/reference/list/list/sort/" rel="nofollow">http://www.cplusplus.com/reference/list/list/sort/</a> schrieb:</p>
<blockquote>
<p>The entire operation does not involve the construction, destruction or copy of any element object. Elements are moved within the container.</p>
</blockquote>
<p>Wobei &quot;move&quot; hier nicht bedeutet dass irgendwas move-assigned oder gar move-constructed würde.<br />
&quot;Moved&quot; heisst einfach nur dass die <code>list</code> -internen next- und previous-Zeiger umgesetzt werden um die Reihenfolge der Elemente zu verändern.</p>
<p>Die Elemente selbst werden dabei nur &quot;gelesen&quot; (bzw. was auch immer <code>operator &lt;</code> bzw. <code>comp</code> macht).</p>
<p><code>std::sort</code> dagegen weiss nichts über <code>list</code> -Interna und muss daher wirklich <code>swap</code> pen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450235</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 15 Apr 2015 00:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 00:56:31 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Selbst wenn es mit <code>std::sort</code> ginge wäre <code>splice</code> + <code>list::sort</code> besser, und zwar wegen...</p>
<p><a href="http://www.cplusplus.com/reference/list/list/sort/" rel="nofollow">http://www.cplusplus.com/reference/list/list/sort/</a> schrieb:</p>
<blockquote>
<p>The entire operation does not involve the construction, destruction or copy of any element object. Elements are moved within the container.</p>
</blockquote>
</blockquote>
<p>Bloß hat die std::list dummerweise keinen random access, weswegen weniger schnelle Algorithmen benutzt werden müssen (Gegenüber dem, was mit std::sort möglich ist). Daher ist es dann in der Praxis doch wieder deutlich langsamer als andere Container; wie so oft bei verketteten Listen, die eben nur in der Theorie ganz toll klingen.</p>
<p>(Eine gut designte Klasse mit großen Datenfeldern hat auch eine Indirektion für diese Datenfelder, so dass Vertauschungsaktionen zweier Instanzen ähnliche Kosten haben wie das Vertauschen von zwei list-Elementen. Und wenn die Klasse es aus irgendeinem Grund nicht so handhabt, kann man immer noch selber nur Verweise im Container speichern)</p>
<p>PS: Laut <a href="http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html" rel="nofollow">diesem Benchmark aus dem Jahr 2012</a> ist der crossover, ab dem die list beim Sortieren besser wird als vector/deque irgendwo zwischen 128 und 1024 Byte pro Datenelement. Das ist schon eine ganze Menge und sicherlich ein Punkt, an dem man so langsam anfängt, den Datenbereich eines Objekts dynamisch zu verwalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450236</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Apr 2015 00:56:31 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 02:46:45 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>PS: Laut <a href="http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html" rel="nofollow">diesem Benchmark aus dem Jahr 2012</a> ist der crossover, ab dem die list beim Sortieren besser wird als vector/deque irgendwo zwischen 128 und 1024 Byte pro Datenelement. Das ist schon eine ganze Menge und sicherlich ein Punkt, an dem man so langsam anfängt, den Datenbereich eines Objekts dynamisch zu verwalten.</p>
</blockquote>
<p>Jo, die mit move-Semantik wird auch ungeheuer aufräumen.</p>
<p>Unabhängig davon ist es bei fetten (und langsamen) Objekten eine feine Idee, sich vor dem Sortieren einen Index als vector<a href="quellcontainer::iterator" rel="nofollow">quellcontainer::iterator</a> zu ziehen und jenen erst zu sortieren und dann den quellcontainer mit der minimalen Anzahl von moves anhand des Idex zu ordnen.<br />
Ups, fühlt sich an, als würde das viel schneller werden als die Messungen und den Unterschied zwischen vector/deque/list auch wegmachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450240</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 15 Apr 2015 02:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 06:08:51 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Unabhängig davon ist es bei fetten (und langsamen) Objekten eine feine Idee, sich vor dem Sortieren einen Index als vector<a href="quellcontainer::iterator" rel="nofollow">quellcontainer::iterator</a> zu ziehen und jenen erst zu sortieren und dann den quellcontainer mit der minimalen Anzahl von moves anhand des Idex zu ordnen.</p>
</blockquote>
<p>Meistens kann man auf das abschliessende Ordnen dann auch komplett verzichten, da man schon eine Menge Zugriffe auf den geordneten Vector machen muss, bevor sich das amortisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450244</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Wed, 15 Apr 2015 06:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 06:12:07 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Unabhängig davon ist es bei fetten (und langsamen) Objekten eine feine Idee, sich vor dem Sortieren einen Index als vector<a href="quellcontainer::iterator" rel="nofollow">quellcontainer::iterator</a> zu ziehen und jenen erst zu sortieren und dann den quellcontainer mit der minimalen Anzahl von moves anhand des Idex zu ordnen.</p>
</blockquote>
<p>Ich habe das Gefühl, das multiset da fast immer besser sein sollte. Aber das ist so ein Fall, wo man messen sollte. Wahrscheinlich mag ich einfach set zu sehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450245</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Apr 2015 06:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 08:16:48 GMT]]></title><description><![CDATA[<p>splice() kannte ich gar nicht.<br />
Super, danke an alle <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450261</guid><dc:creator><![CDATA[!Hansi]]></dc:creator><pubDate>Wed, 15 Apr 2015 08:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 09:35:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a><br />
<code>list::sort</code> ist besser für <code>list</code> .<br />
Ob <code>list</code> der passende Container ist, ist dann wieder ne andere Frage. Der Punkt war nicht gefragt, daher bin ich davon ausgegangen dass <code>list</code> schon Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450268</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 15 Apr 2015 09:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to std::list sort range? on Wed, 15 Apr 2015 10:06:13 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich habe das Gefühl, das multiset da fast immer besser sein sollte. Aber das ist so ein Fall, wo man messen sollte. Wahrscheinlich mag ich einfach set zu sehr.</p>
</blockquote>
<p>Mach doch ein Benchmark. (SCNR)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450275</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Wed, 15 Apr 2015 10:06:13 GMT</pubDate></item></channel></rss>