<?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[Gelöst. Dramatischer Performanz-Verlust beim Sortieren!]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach einem Refactoring braucht der Sortieralgorithmus auf einmal<br />
<strong>dreimal</strong> <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="😮"
    /> so lange wie vorher.</p>
<p>Der Aufruf ist vorher gewesen:</p>
<pre><code>std::list&lt; std::vector&lt; double &gt; &gt; list = ...;
list-&gt;sort( SortList() );
</code></pre>
<p>Nach dem Refactoring gibt es eine eigene Container-Klasse:</p>
<pre><code>std::list&lt; Container &gt; list = ...;
list-&gt;sort( SortList() );
</code></pre>
<p>Liegt das an der Sortierklasse?</p>
<p>Vorher:</p>
<pre><code>enum MatrixCol
{
	FROM = 0, 
	TO = 1,
	COUNT = 2,
	RANGE = 3,
	MEAN = 4,
	COUNT_FULL = 5
};

class SortList
{
public:
	bool operator()( const std::vector&lt;double&gt; &amp; x, const std::vector&lt;double&gt; &amp; y )
	{
		if( x[MatrixCol::RANGE] == y[MatrixCol::RANGE] )
		{
			if( x[MatrixCol::MEAN] == y[MatrixCol::MEAN] )
			{
				if( x[MatrixCol::FROM] == y[MatrixCol::FROM] )
				{
					return x[MatrixCol::TO] &lt; y[MatrixCol::TO];
				}
				return x[MatrixCol::FROM] &lt; y[MatrixCol::FROM];
			}
			return x[MatrixCol::MEAN] &gt; y[MatrixCol::MEAN];
		}
		return x[MatrixCol::RANGE] &gt; y[MatrixCol::RANGE];
	}
};
</code></pre>
<p>Nachher:</p>
<pre><code>class Container
{
public:
	int m_from, m_to, m_count;
	double m_range, m_mean;
};

class SortList
{
public:
	bool operator()( const Container &amp; x, const Container &amp; y )
	{
		if( x.m_range == y.m_range )
		{
			if( x.m_mean == y.m_mean )
			{
				if( x.m_from == y.m_from )
				{
					return x.m_to &lt; y.m_to;
				}
				return x.m_from &lt; y.m_from;
			}
			return x.m_mean &lt; y.m_mean;
		}
		return x.m_range &gt; y.m_range;
	}
};
</code></pre>
<p>Wie würde man das besser machen? Der Nachteil an der alten Variante ist,<br />
dass from, to und count eben keine doubles, sondern integers sind.</p>
<p>Danke für Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209605/gelöst-dramatischer-performanz-verlust-beim-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 03:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209605.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Apr 2008 14:05:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gelöst. Dramatischer Performanz-Verlust beim Sortieren! on Tue, 01 Apr 2008 15:01:47 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach einem Refactoring braucht der Sortieralgorithmus auf einmal<br />
<strong>dreimal</strong> <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="😮"
    /> so lange wie vorher.</p>
<p>Der Aufruf ist vorher gewesen:</p>
<pre><code>std::list&lt; std::vector&lt; double &gt; &gt; list = ...;
list-&gt;sort( SortList() );
</code></pre>
<p>Nach dem Refactoring gibt es eine eigene Container-Klasse:</p>
<pre><code>std::list&lt; Container &gt; list = ...;
list-&gt;sort( SortList() );
</code></pre>
<p>Liegt das an der Sortierklasse?</p>
<p>Vorher:</p>
<pre><code>enum MatrixCol
{
	FROM = 0, 
	TO = 1,
	COUNT = 2,
	RANGE = 3,
	MEAN = 4,
	COUNT_FULL = 5
};

class SortList
{
public:
	bool operator()( const std::vector&lt;double&gt; &amp; x, const std::vector&lt;double&gt; &amp; y )
	{
		if( x[MatrixCol::RANGE] == y[MatrixCol::RANGE] )
		{
			if( x[MatrixCol::MEAN] == y[MatrixCol::MEAN] )
			{
				if( x[MatrixCol::FROM] == y[MatrixCol::FROM] )
				{
					return x[MatrixCol::TO] &lt; y[MatrixCol::TO];
				}
				return x[MatrixCol::FROM] &lt; y[MatrixCol::FROM];
			}
			return x[MatrixCol::MEAN] &gt; y[MatrixCol::MEAN];
		}
		return x[MatrixCol::RANGE] &gt; y[MatrixCol::RANGE];
	}
};
</code></pre>
<p>Nachher:</p>
<pre><code>class Container
{
public:
	int m_from, m_to, m_count;
	double m_range, m_mean;
};

class SortList
{
public:
	bool operator()( const Container &amp; x, const Container &amp; y )
	{
		if( x.m_range == y.m_range )
		{
			if( x.m_mean == y.m_mean )
			{
				if( x.m_from == y.m_from )
				{
					return x.m_to &lt; y.m_to;
				}
				return x.m_from &lt; y.m_from;
			}
			return x.m_mean &lt; y.m_mean;
		}
		return x.m_range &gt; y.m_range;
	}
};
</code></pre>
<p>Wie würde man das besser machen? Der Nachteil an der alten Variante ist,<br />
dass from, to und count eben keine doubles, sondern integers sind.</p>
<p>Danke für Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484530</guid><dc:creator><![CDATA[namtel]]></dc:creator><pubDate>Tue, 01 Apr 2008 15:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Gelöst. Dramatischer Performanz-Verlust beim Sortieren! on Tue, 01 Apr 2008 15:01:25 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Es lag nicht an der Sortierklasse, sondern an verkehrter Parameterübergabe an anderer Stelle im Programm.</p>
<p>So weit so gut!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484569</guid><dc:creator><![CDATA[namtel]]></dc:creator><pubDate>Tue, 01 Apr 2008 15:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to Gelöst. Dramatischer Performanz-Verlust beim Sortieren! on Wed, 02 Apr 2008 06:44:34 GMT]]></title><description><![CDATA[<p>Du sortierst auch anders, ist das gewollt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484952</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 02 Apr 2008 06:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Gelöst. Dramatischer Performanz-Verlust beim Sortieren! on Fri, 04 Apr 2008 07:33:54 GMT]]></title><description><![CDATA[<p>Ich habe eine ganze Reihe von Sortierklassen und hab sie vereinfacht für die Forumfrage. Das sind also eigentlich zwei verschiedene.<br />
Danke fürs aufmerksam hingucken!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486215</guid><dc:creator><![CDATA[namtel]]></dc:creator><pubDate>Fri, 04 Apr 2008 07:33:54 GMT</pubDate></item></channel></rss>