<?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[Vergleichsfunktion eliminieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Struct Intron</p>
<pre><code>struct Intron {
	std::string seq_name;	///&lt; name of the sequence, must be a chromosom or a scaffold
	unsigned start;	///&lt; start position of the intron
	unsigned end;	///&lt; end position of the intron
	std::string strand;	///&lt; either + or -
	unsigned mult;	///&lt; multiplicity = copy number; absolute number of reads that span the intron
};
</code></pre>
<p>der ein Member Struct innerhalb der Klasse Genomic_Data ist. Auf Intron ist eine Vergleichsfunktion</p>
<pre><code>bool sorting_introns_s(Genomic_Data::Intron i, Genomic_Data::Intron j) { return i.start &lt; j.start; }
</code></pre>
<p>definiert, die z. B. so angewandt wird:</p>
<pre><code>sort(curr_genome.introns.begin(), curr_genome.introns.end(), sorting_introns_s);
</code></pre>
<p>Ich frage mich nun, ob man sich die Funktion <code>sorting_introns_s</code> irgendwie sparen kann, also ob man im Aufruf von <code>sort</code> das letzte Argument direkt als Ausdruck formulieren kann (ich habe nämlich einige Funktionen dieser Art definiert).</p>
<p>Fällt dazu jemanden was ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311986/vergleichsfunktion-eliminieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 05:37:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311986.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Dec 2012 12:26:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 12:26:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Struct Intron</p>
<pre><code>struct Intron {
	std::string seq_name;	///&lt; name of the sequence, must be a chromosom or a scaffold
	unsigned start;	///&lt; start position of the intron
	unsigned end;	///&lt; end position of the intron
	std::string strand;	///&lt; either + or -
	unsigned mult;	///&lt; multiplicity = copy number; absolute number of reads that span the intron
};
</code></pre>
<p>der ein Member Struct innerhalb der Klasse Genomic_Data ist. Auf Intron ist eine Vergleichsfunktion</p>
<pre><code>bool sorting_introns_s(Genomic_Data::Intron i, Genomic_Data::Intron j) { return i.start &lt; j.start; }
</code></pre>
<p>definiert, die z. B. so angewandt wird:</p>
<pre><code>sort(curr_genome.introns.begin(), curr_genome.introns.end(), sorting_introns_s);
</code></pre>
<p>Ich frage mich nun, ob man sich die Funktion <code>sorting_introns_s</code> irgendwie sparen kann, also ob man im Aufruf von <code>sort</code> das letzte Argument direkt als Ausdruck formulieren kann (ich habe nämlich einige Funktionen dieser Art definiert).</p>
<p>Fällt dazu jemanden was ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281906</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Thu, 20 Dec 2012 12:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 12:27:17 GMT]]></title><description><![CDATA[<p>Das geht ab C++11 mit Lambdas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281907</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 20 Dec 2012 12:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 13:09:10 GMT]]></title><description><![CDATA[<p>Oder mit C++03 und boost.lambda, was aber etwas häßlich aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281930</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 20 Dec 2012 13:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 13:11:09 GMT]]></title><description><![CDATA[<p>oder auch per Boost.Bind:</p>
<pre><code>using boost::bind;
std::sort(
   curr_genome.introns.begin(), curr_genome.introns.end(),
   bind(&amp;Intron::start,_1) &lt; bind(&amp;Intron::start,_2)
);
</code></pre>
<p>Beim Boost'schen bind kann man nämlich noch auf überladende Operatoren zurückgreifen, die wieder Funktoren liefern.</p>
<p>In C++11 mit Lambdas ist das nicht wirklich kürzer:</p>
<pre><code>std::sort(
   curr_genome.introns.begin(), curr_genome.introns.end(),
   [](Intron const&amp; a, Intron const&amp; b){return a.start&lt;b.start;}
);
</code></pre>
<p>Das ist mal wieder so eine Situation, wo ich denke: Schade, dass man da bei Lambdas die Typen der Parameter noch mit angeben muss. Ich hoffe, da überlegen sich die C++-Standardisierungs-Leute noch etwas schlaues, damit das kürzer geht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281931</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 20 Dec 2012 13:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 13:18:25 GMT]]></title><description><![CDATA[<p>Wenn Du meinst dass Vergleichsoperatoren für Introns sinnvoll sind, wäre es auch eine Möglichkeit, diese zu überladen.<br />
Z.B. <code>bool operator&lt;(const Intron&amp;, const Intron&amp;);</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281932</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 20 Dec 2012 13:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion eliminieren on Thu, 20 Dec 2012 13:33:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename Member&gt;
struct compare_on_member_ {
  compare_on_member_(Member const&amp; m) : m(m) {}
  Member m;
  template &lt;typename T&gt;
  bool operator()(T const&amp; lhs, T const&amp; rhs) const
  { return lhs.*m &lt; rhs.*m; }
};

template &lt;typename Member&gt;
compare_on_member_&lt;Member&gt; compare_on_member(Member m)
{
  return compare_on_member_&lt;Member&gt;(m);
}

// dann:
std::sort(vec.begin(), vec.end(), compare_on_member(&amp;Intron::seq_name));
std::sort(vec.begin(), vec.end(), compare_on_member(&amp;Intron::start));
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2281936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281936</guid><dc:creator><![CDATA[bigmember]]></dc:creator><pubDate>Thu, 20 Dec 2012 13:33:10 GMT</pubDate></item></channel></rss>