<?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[Sortieren...]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich ein einen <code>std::vector&lt;particle&gt; part</code> mit folgenden Objekten.</p>
<pre><code class="language-cpp">struct particle
{
    [...]
    double collision_time;
}
</code></pre>
<p>Ich wuerde gerne alle Elemente aus meiner Liste <code>part</code> sortieren, so dass ich auf das Element zugreifen kann, welches die kleinste collision_time hat. Fallen euch Wege ein, die sinnvoller als der naive Ansatz sind, einfach alle Elemente des Vektors durchzugehen und sich das mit dem kleinsten rauszuschreiben?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287265/sortieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 13:49:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287265.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 May 2011 12:54:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 12:54:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich ein einen <code>std::vector&lt;particle&gt; part</code> mit folgenden Objekten.</p>
<pre><code class="language-cpp">struct particle
{
    [...]
    double collision_time;
}
</code></pre>
<p>Ich wuerde gerne alle Elemente aus meiner Liste <code>part</code> sortieren, so dass ich auf das Element zugreifen kann, welches die kleinste collision_time hat. Fallen euch Wege ein, die sinnvoller als der naive Ansatz sind, einfach alle Elemente des Vektors durchzugehen und sich das mit dem kleinsten rauszuschreiben?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068450</guid><dc:creator><![CDATA[maxi_muster]]></dc:creator><pubDate>Wed, 25 May 2011 12:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 13:04:26 GMT]]></title><description><![CDATA[<p>Was willst du denn jetzt? Das kleinste Element finden oder die ganze Liste sortieren? Egal wie die Antwort lautet, ist so eine Standardaufgabe nichts was man jedes mal selber neu programmiert. Da lässt man dann einfach std::min_element beziehungsweise std::sort drauf los.</p>
<p>Hier müsstest du natürlich noch entweder einen eigenen Vergleichsoperator, eine Vergleichsfunktion oder (mit C++0x) einen passenden Lambdaausdruck schreiben, damit du auch die collision_time im struct als Vergleichselement heranziehst. Keine Angst, das klingt kompliziert, ist aber ziemlich einfach und sollte in jedem Beispiel zu den Standardalgorithmen vorkommen.<br />
edit: Kurz gesagt: Das was EOutOfResources im Beitrag unter mir zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068454</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 25 May 2011 13:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 13:16:04 GMT]]></title><description><![CDATA[<p>Hier die Möglichkeiten:</p>
<pre><code class="language-cpp">//Als Operator (C++ &amp; C++0x)
struct Particle
{
  //...
  double collision_time;
  //...
  bool operator&lt; (const Particle&amp; rhs) const
  {
    return this-&gt;collision_time &lt; rhs.collision_time;
  }
  //...
}
std::sort(part.begin(), part.end());
</code></pre>
<pre><code class="language-cpp">//Als freie Vergleichsfunktion (C++ &amp; C++0x)
bool ParticleLess(const Particle&amp; lhs, const Particle&amp; rhs)
{
  return lhr.collision_time &lt; rhs.collision_time;
}
std::sort(part.begin(), part.end(), ParticleLess);
</code></pre>
<pre><code class="language-cpp">//Als Lambdafunktion (nur C++0x)
std::sort(part.begin(), part.end(), [](const Particle&amp; lhs, const Particle&amp; rhs) -&gt; bool{return lhr.collision_time &lt; rhs.collision_time;});
</code></pre>
<p>EDIT: Sofern ich dich richtig verstanden habe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068455</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 25 May 2011 13:16:04 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 13:10:29 GMT]]></title><description><![CDATA[<p>maxi_muster schrieb:</p>
<blockquote>
<p>Fallen euch Wege ein, die sinnvoller als der naive Ansatz sind, einfach alle Elemente des Vektors durchzugehen und sich das mit dem kleinsten rauszuschreiben?</p>
</blockquote>
<p>Anders geht es wohl kaum. Wenn man sich auch nur ein Element nicht anguckt, könnte das ja gerade das kleinste sein.</p>
<p>Falls du aber immer wieder das kleinste haben willst, könnte es sich anbieten, die Partikel von vornherein in einer Priority Queue zu speichern. (=&gt; Google, Wikipedia, etc.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068466</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 25 May 2011 13:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 13:17:24 GMT]]></title><description><![CDATA[<p>std::min_element und ein entsprechendes Funktionsobjekt/Vergleichsfunktion gingen auch, ohne dass die Liste sortiert werden müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068469</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 25 May 2011 13:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 13:47:46 GMT]]></title><description><![CDATA[<p>Ich weiß nicht genau was du da programmierst aber ich vermute mal, dass ein wirklich sinnvoller Algorithmus gar nicht alle collision_times berechnen muss um, das 'dichteste' Partikel zu finden.<br />
Ansonsten wurden schon die richtigen Ansätze genannt, und das war nur ein kleiner Denkanstoß <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/2068483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068483</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 25 May 2011 13:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 14:36:31 GMT]]></title><description><![CDATA[<p>Danke fuer die vielen schnellen Antworten. Das war wohl etwas wirr, mit dem sortieren und kleinstem Element finden.</p>
<p>Ich schreibe hier gerade an einer Event-Driven-Simulation, Algorithmus ist einfach:</p>
<ul>
<li>Finde die naechste Kollision</li>
<li>Bewege alle Teilchen</li>
<li>Update Kollisionsliste</li>
</ul>
<p>Ich habe dann als ich die Frage gestellt habe festgestellt, das der naive Loesungsweg Ordnung N ja alles ist was ich brauche, und das es wohl kaum besser geht.<br />
Es war halt aergerlich, weil ich versucht habe die Position in der particle liste selbst nicht zu veraendern. Sodass particle[1] durchweg particle[1] bleibt. Andererseits dachte ich, ich braeuchte eine sortierte Liste, die die naechsten Events beschreibt. Ich habe mir dann also eine zusaetzlichen Vector gemacht und da alle indizes eingetragen, und die sortieren wollen. Also so, dass an position 0 der index des particles steht, der die naechste Kollision hat. Und das war komplizierter als ich dachte...</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068517</guid><dc:creator><![CDATA[maxi_muster]]></dc:creator><pubDate>Wed, 25 May 2011 14:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Wed, 25 May 2011 15:04:36 GMT]]></title><description><![CDATA[<p>maxi_muster schrieb:</p>
<blockquote>
<p>Ich habe mir dann also eine zusaetzlichen Vector gemacht und da alle indizes eingetragen, und die sortieren wollen. Also so, dass an position 0 der index des particles steht, der die naechste Kollision hat. Und das war komplizierter als ich dachte...</p>
</blockquote>
<p>Solange du keine particles in deinen vector einfügst kannst du auch problemlos in deinem zweiten vector poitner statt der Indizes verwenden. Die lassen sich deutlich leichter sortieren (einfach dereferenzieren und den Wert dahinter als Sortierkriterium nehmen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068540</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 25 May 2011 15:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieren... on Thu, 26 May 2011 06:01:51 GMT]]></title><description><![CDATA[<p>Kannst Du mir verraten was genau Du da simulierst? Ich mache ähnliche Sachen <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/2068830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068830</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 26 May 2011 06:01:51 GMT</pubDate></item></channel></rss>