<?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[Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade eine möglichst schnelle Variante des folgenden Miniproblems zu implementieren:</p>
<p>Man hat eine gegeben folge von Zahlen in einem Array:</p>
<p>2,5,3,1,2,2,5,3,1,5,5,5</p>
<p>Und jetzt will ich in ein ergebnisarray die anzahl an gleichen zahlen aufsteigend.</p>
<p>Also wenn mans sortiert ist es ja:</p>
<p>1,1,2,2,2,3,3,5,5,5,5,5</p>
<p>und das ergebnis sollte sein:</p>
<p>2,3,2,5</p>
<p>Die arraygrösse des ergebnisarrays ist vorher bekannt, also es ist bekannt wieviel unterschiedliche zahlen in dem ausgangsarray vorhanden sind.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188819/miniprog-wer-liefert-schnellstes-snippet-gt-anzahl-gleicher-zahlen-in-folge</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:10:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188819.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Aug 2007 16:07:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 16:07:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade eine möglichst schnelle Variante des folgenden Miniproblems zu implementieren:</p>
<p>Man hat eine gegeben folge von Zahlen in einem Array:</p>
<p>2,5,3,1,2,2,5,3,1,5,5,5</p>
<p>Und jetzt will ich in ein ergebnisarray die anzahl an gleichen zahlen aufsteigend.</p>
<p>Also wenn mans sortiert ist es ja:</p>
<p>1,1,2,2,2,3,3,5,5,5,5,5</p>
<p>und das ergebnis sollte sein:</p>
<p>2,3,2,5</p>
<p>Die arraygrösse des ergebnisarrays ist vorher bekannt, also es ist bekannt wieviel unterschiedliche zahlen in dem ausgangsarray vorhanden sind.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338720</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Sat, 04 Aug 2007 16:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 17:21:20 GMT]]></title><description><![CDATA[<p>Hab gerade keinen Compiler, würd's aber so machen:</p>
<pre><code class="language-cpp">struct counter_copy {
   counter_copy(int* s, int* e, int* p) : start(s), end(s), pos(p) {}
   int* start, end, pos;
   void operator()(int val) { *p = count(start, end, val); ++p; }
};

int main() {
   int a[] = { 1,1,2,2,2,3,3,5,5,5,5,5 };     // AusgangsArray
   size_t const a_size = sizeof(a)/sizeof(int);
   int werte[a_size];                         // vorhandene Werte
   size_t numElements[a_size];                // Haeufigkeit der Werte
   counter_copy c(a, a+a_size, numElements);  // Zaehler-Funktor

   int* werte_end = unique_copy(a, a+a_size, werte);
   for_each(werte, werte_end, c);
   return 0;
}
</code></pre>
<p>Geht aber bestimmt noch kürzer.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338733</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 04 Aug 2007 17:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Tue, 07 Aug 2007 13:48:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int a[] = { 1,1,2,2,2,3,3,5,5,5,5,5 };
const int num = sizeof(a)/sizeof(int);

map&lt;int,int&gt; mappo;

for(int i=0; i&lt;num; ++i)
        ++mappo[a[i&rsqb;&rsqb;;
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Ich nehms dir net übel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Hab gerade keinen Compiler</p>
</blockquote>
<p>~Anstatt nen neuen Beitrag zu schreiben, editiere ich meine alten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1338740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338740</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 07 Aug 2007 13:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 17:22:03 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Ich nehms dir net übel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Hab gerade keinen Compiler</p>
</blockquote>
</blockquote>
<p>Ja, hast ja Recht ... meine ursprünglich feste &quot;10&quot; wäre wohl besser gewesen - außerdem ist Deins ja nun wirklich kürzer und eleganter ! Super !</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338744</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 04 Aug 2007 17:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 17:50:21 GMT]]></title><description><![CDATA[<p>Mit Hilfe des Compilers nochmal verbessert:</p>
<pre><code class="language-cpp">struct counter_copy {
   counter_copy(int* s, int* e, size_t* p) : start(s), end(e), pos(p) {}
   int *start, *end;
   size_t *pos;
   void operator()(int val) { *pos = count(start, end, val); ++pos; }
};
</code></pre>
<p>Die Methode von mir hatte ich mal von hier aufgeschnappt: <a href="http://www.cppreference.com/cppmap/all.html" rel="nofollow">http://www.cppreference.com/cppmap/all.html</a> , nur bissl unsauber, da meine Indizes die Zahlen aus dem Array sind und somit jede Menge Stellen in der map leer sind, also 0 ausgegeben werde würde, wenn man durchiteriert. Aber die könnte man ja alle einfach noch entfernen, weiß aber im moment nicht wie ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338756</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 04 Aug 2007 17:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:13:00 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Die Methode von mir hatte ich mal von hier aufgeschnappt: <a href="http://www.cppreference.com/cppmap/all.html" rel="nofollow">http://www.cppreference.com/cppmap/all.html</a> , nur bissl unsauber, da meine Indizes die Zahlen aus dem Array sind und somit jede Menge Stellen in der map leer sind, also 0 ausgegeben werde würde, wenn man durchiteriert. Aber die könnte man ja alle einfach noch entfernen, weiß aber im moment nicht wie ...</p>
</blockquote>
<p>Es soll ja ein Ergebnisarray werden, dann können wir kopieren und die Nullen gleichzeitig entfernen:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; ergebnis;
remove_copy(mappo.begin(),mappo.end(),back_inserter(ergebnis),0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1338764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338764</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:26:47 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::vector&lt;int&gt; ergebnis;
remove_copy(mappo.begin(),mappo.end(),back_inserter(ergebnis),0);
</code></pre>
</blockquote>
<p>Mit remove etc. bin ich mich ja die ganze Zeit am rumschlagen. Wenn remove den Iterator dereferenziert kommt ja ein pair&lt;&gt; dabei raus und der kann nicht einfach mit 0 verglichen werden. Man könnte das mit Funktionsobjekten etc. ausbauen, damit es funkitoniert, aber wäre keine EinZeilenLösung, so wie es sonst funktioniert: ( Kann sein das ich mich mit dem geschriebenen irren könnte ).</p>
<p>Komischerweise werden die 0'en nur bei normalen indiziertem iterieren angezeigt nicht wenn ich über Iteratoren gehe:</p>
<pre><code class="language-cpp">for(map&lt;int,int&gt;::iterator it = mappo.begin(); it != mappo.end(); ++it)
    cout &lt;&lt; it-&gt;second;
//2325

for(int i=0; i&lt;mappo.size(); ++i)
        cout &lt;&lt;mappo[i];
//023205
</code></pre>
<p>Ein neues Phänomen für mich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338765</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:27:51 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Wenn remove den Iterator dereferenziert kommt ja ein pair&lt;&gt; dabei raus und der kann nicht einfach mit 0 verglichen werden.</p>
</blockquote>
<p>Stimmt - hab ich geschlafen.</p>
<p>KasF schrieb:</p>
<blockquote>
<p>Komischerweise werden die 0'en nur bei normalen indiziertem iterieren angezeigt nicht wenn ich über Iteratoren gehe:</p>
<p>Ein neues Phänomen für mich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Weil mappo[0] erst in deiner Schleife angelegt wird <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/1338766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338766</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:37:18 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>nur bissl unsauber, da meine Indizes die Zahlen aus dem Array sind und somit jede Menge Stellen in der map leer sind, also 0 ausgegeben werde würde, wenn man durchiteriert.</p>
</blockquote>
<p>Äh, nein. Du musst einfach nur mit den Map-Iteratoren durchgehen, nicht <code>mappo[index]</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338768</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:39:57 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Weil mappo[0] erst in deiner Schleife angelegt wird <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>
</blockquote>
<p>Ahhhhhhhhh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> (oh man)</p>
<p>Wieso funktioniert das denn nicht:</p>
<pre><code class="language-cpp">pair&lt;int,int&gt; eraser(0,0);
remove_copy(mappo.begin(),mappo.end(),back_inserter(ergebnis),eraser);
</code></pre>
<p>Macht zwar keinen Sinn, da ja beide Paar-Objekte gleich sein müssen, aber trotzdem.</p>
<pre><code class="language-cpp">stl_algo:remove_copy(...)
if (!(*__first == __value))
/*
error: no match for 'operator==' in '(&amp;__first)-&gt;std::_Rb_tree_iterator&lt;_Tp&gt;::operator* [with _Tp = std::pair&lt;const int, int&gt;]() == __value'
*/
</code></pre>
<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="😕"
    /><br />
Liefert *__first kein pair&lt;int,int&gt; zurück ?</p>
<p>Edit: Ja finix, der Groschen ist soeben gefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338769</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 18:44:22 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Es soll ja ein Ergebnisarray werden, dann können wir kopieren und die Nullen gleichzeitig entfernen:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; ergebnis;
remove_copy(mappo.begin(),mappo.end(),back_inserter(ergebnis),0);
</code></pre>
</blockquote>
<p>Wie wär's mit</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; result(result_size); // result_size laut Aufgabenstellung bekannt
transform(mappo.begin(),
          mappo.end(),
          result.begin(), // edit: statt c&amp;p-Fehler &quot;back_inserter(result)&quot;,
          select2nd&lt;map&lt;int, int&gt;::value_type&gt;());
</code></pre>
<p>Edit:</p>
<p>KasF schrieb:</p>
<blockquote>
<p>Edit: Ja finix, der Groschen ist soeben gefallen.</p>
</blockquote>
<p>Hehe, ja ich seh's. Sollte mir echt angewöhnen meine Tabs hin und wieder zu refreshen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338772</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Sat, 04 Aug 2007 21:15:43 GMT]]></title><description><![CDATA[<p>Die Anzahl gleicher Zahlen (Thread Text) oder gleicher Zahlen in Folge (Thread Titel)?<br />
Die Anzahl gleicher Zahlen in Folge ist trivial und geht ungefähr so:</p>
<pre><code class="language-cpp">void lala(int const* in, size_t size, int* out)
{
    for (size_t i = 1; i &lt; size; i++)
    {
        (*out)++;
        if (in[i] != in[i-1])
            out++;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1338823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338823</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 04 Aug 2007 21:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 18:58:43 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: da stimmt noch was mim letzten index nicht....also bei der berechnung der letzten gleichen zahlen....ich schau gerade...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339767</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Mon, 06 Aug 2007 18:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:18:54 GMT]]></title><description><![CDATA[<p>hustbaer hat halt vorher nicht sortiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339781</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:26:28 GMT]]></title><description><![CDATA[<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="😕"
    /> WAS?</p>
<p>dann gehts doch erste recht nicht ...oder bin ich jetzt shcon ganz blind vor bäumen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339785</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:28:27 GMT]]></title><description><![CDATA[<p>achso.....er meint die anzahl gleicher zahlen in FOLGE....<br />
also sowas: 223322244 wäre 2232</p>
<p>ich aber brauche halt: 522 weil 5 2er auftauchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339787</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:30:41 GMT]]></title><description><![CDATA[<p>Das kürzeste was ich vom Code her hinbekomme, sieht so aus:</p>
<pre><code class="language-cpp">void lala(int const* in, size_t size, int* out)
{
    std::map&lt;int,int&gt; vals;
    for ( size_t i=0; i&lt;size; i++ )
        ++ vals[ in[i] ];
    for ( map&lt;int,int&gt;::iterator iter=vals.begin(); iter!=vals.end(); iter++ )
        *(out++) = iter-&gt;second;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339788</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:41:42 GMT]]></title><description><![CDATA[<p>also die version von hustbaer hat halt am ende des arrays ein problem weil er ja dann zu wenig zählt...ohne jetzt vorlaut sein zu wollen...</p>
<p>Ich danke euch allen - aber ich wollte eigentlich nicht die Kürzeste version - sonder die schnellste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>aber scheint wohl einher zu gehen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339794</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 19:55:18 GMT]]></title><description><![CDATA[<p>@badestrand...du sortierst vorher nicht nicht wahr?</p>
<p>ich revidiere gerade die aussage von vorhin dass das von hustbaer nicht stimmt....mein hirn nimmts als korrekt an - nur mein eingabe array zählt am ende zu wenig....ich muss noch mal drüberschauen <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="🙄"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1339796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339796</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Mon, 06 Aug 2007 19:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 20:22:45 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>@badestrand...du sortierst vorher nicht nicht wahr?</p>
</blockquote>
<p>std::map sortiert automatisch, hab ich mir einfach zu eigen gemacht ...</p>
<p>btw, hier meine &quot;schnelle, aber lange&quot; Version:</p>
<pre><code class="language-cpp">void lala( int const* in, size_t in_size, int* out, size_t out_size )
{
	struct Duo
	{
		int key;
		int value;

		static void SwapElements( Duo* list, int first, int second )
		{
			Duo tmp = list[first];
			list[first] = list[second];
			list[second] = tmp;
		}

		static void Quicksort( int low, int high, Duo* list )
		{
			int top = low;
			int bottom = high - 1;
			int iPartitionIndex = 0;
			int iPartitionValue = 0;
			if ( low &lt; high )
			{
				if ( high == (low+1) )
				{
					if ( list[low].key &gt;= list[high].key )
						SwapElements( list, high, low );
				}
				else
				{
					iPartitionIndex = static_cast&lt;int&gt;((low + high) / 2);
					iPartitionValue = list[iPartitionIndex].key;
					SwapElements( list, high, iPartitionIndex );
					do
					{
						while ( (list[top].key&lt;iPartitionValue) &amp;&amp; (top&lt;=bottom) )
							++top;
						while ( (list[bottom].key&gt;=iPartitionValue) &amp;&amp; (top &lt;= bottom))
							--bottom;
						if ( top &lt; bottom )
							SwapElements( list, top, bottom );
					} while ( top &lt; bottom );
					SwapElements( list, top, high );
					Quicksort( low, top-1, list );
					Quicksort( top+1, high, list );
				}
			}
		}
	};

	int n = 0;
	Duo* m = new Duo [ out_size ];

	for ( size_t i=0; i&lt;in_size; ++i )
	{
		bool found = false;
		for ( int j=0; j&lt;n; j++ )
		{
			if ( m[j].key == in[i] )
			{
				++m[j].value;
				found = true;
				break;
			}
		}
		if ( ! found )
		{
			m[n].key = in[i];
			m[n].value = 1;
			++n;
		}
	}

	Duo::Quicksort( 0, n-1, m );

	for ( int i=0; i&lt;n; ++i )
		out[i] = m[i].value;

	delete[] m;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339811</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 06 Aug 2007 20:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 20:26:57 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Liefert *__first kein pair&lt;int,int&gt; zurück ?</p>
</blockquote>
<p>Nein, ein pair&lt;const int,int&gt; <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>
<p>So funktioniert das dann aber auch nicht:</p>
<pre><code class="language-cpp">map&lt;int, int&gt; mappo;
std::vector&lt; pair&lt;const int,int&gt; &gt; ergebnis;

mappo.insert(make_pair(4,5));

pair&lt;const int,int&gt; eraser(4,5);
remove_copy(mappo.begin(),mappo.end(),ergebnis.begin(),eraser);
</code></pre>
<p>Kann jemand mit remove und ner map ein funkionierendes Beispiel posten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339816</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 20:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 22:23:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a>: Ich habs mal mit deinem select2nd probiert.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct select2nd
{
    typename T::second_type operator()( const T&amp; val )
    {
        return val.second;
    }
};

int main()
{

    map&lt;int, int&gt; mappo;

    mappo.insert(make_pair(4,5));

    std::vector&lt;int&gt; result;
    transform(mappo.begin(), mappo.end(), result.begin(), select2nd&lt;map&lt;int, int&gt;::value_type&gt;() );

    copy(result.begin(),result.end(),ostream_iterator&lt;int&gt;(cout));

}
</code></pre>
<p>&quot;..hat ein Problem festgestellt und muss beendet werden&quot; ???<br />
Wo ist mein Fehler ?</p>
<p>Edit: Oh man, ich schreibe in irgendeinen Speicher.</p>
<pre><code class="language-cpp">back_inserter(result);
//oder
std::vector&lt;int&gt; result(mappo.size());
</code></pre>
<p>schafft natürlich Abhilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339826</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 22:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 22:06:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main(int argc, char* argv[])
{
   int a[] = { 1,1,2,2,2,3,3,5,5,5,5,5 };
   const int num = sizeof(a)/sizeof(int);
   set &lt;int&gt; nr;
   for(int i=0;i&lt;num;i++) nr.insert(a[i]);
   for(set &lt;int&gt;::iterator it=nr.begin();it!=nr.end();it++) cout &lt;&lt; count(a,a+num,*it);
   return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339851</guid><dc:creator><![CDATA[blogg]]></dc:creator><pubDate>Mon, 06 Aug 2007 22:06:07 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Mon, 06 Aug 2007 22:17:44 GMT]]></title><description><![CDATA[<p>Normales remove sollte also überhaupt nicht funktionieren mit ner map:</p>
<p><a href="http://www.sgi.com/tech/stl/Map.html" rel="nofollow">http://www.sgi.com/tech/stl/Map.html</a> schrieb:</p>
<blockquote>
<p>[1] Map::iterator is not a mutable iterator, because <strong>map::value_type is not Assignable</strong>. That is, if i is of type map::iterator and p is of type map::value_type, then *<strong>i = p is not a valid expression</strong>. However, map::iterator isn't a constant iterator either, because it can be used to modify the object that it points to. Using the same notation as above, (*i).second = p.second is a valid expression. The same point applies to map::reverse_iterator.</p>
</blockquote>
<p>Eine remove_copy müsste dennoch irgendwie funktionieren, da die map ( bzw. dessen Iterator ) ja nicht modifiziert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339853</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 22:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Tue, 07 Aug 2007 02:26:08 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>also die version von hustbaer hat halt am ende des arrays ein problem weil er ja dann zu wenig zählt...ohne jetzt vorlaut sein zu wollen...</p>
</blockquote>
<p>Ja, du hast Recht. Doofer Fehler aber auch. So müsste passen:</p>
<pre><code class="language-cpp">void lala(int const* in, size_t size, int* out) 
{ 
    (*out)++; 
    for (size_t i = 1; i &lt; size; i++) 
    { 
        if (in[i] != in[i-1]) 
            out++; 
        (*out)++; 
    } 
}
</code></pre>
<p>Die schnellste Version von &quot;dem Anderen&quot; (-&gt; 522 statt 2232) wäre IMHO über eine hash-map zu erreichen. Damit kommst du auch auf O(N), vorausgesetzt die Map ist gross genug. Wenn die hash-map allerdings ZU gross wird wird das Anlegen/Auslesen/Freigeben wieder grob aufwändig, womit sich der tolle O(N) Vorteil wieder atomisiert. Könnte also leicht sein dass eine O(N log N) Lösung absolut gesehen (für realistische N) besser ist als die O(N) Lösung namens &quot;hash-map&quot;.</p>
<p>Macht übrigens denke ich auch einen Unterschied ob du für 992299333 als Output 423 (erstes Vorkommen zuerst) oder 234 (niedrigstes Element zuerst) brauchst (oder ob beides akzeptabel ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339870</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 07 Aug 2007 02:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Miniprog: Wer liefert schnellstes snippet :) -&amp;gt; anzahl gleicher zahlen in folge on Tue, 07 Aug 2007 13:36:49 GMT]]></title><description><![CDATA[<p>Danke Hustbaer,</p>
<p>interessant mit den Komplexitätsmaßen...also der input kann wirklich sehr stark variieren , von 20 bis 20000 z.B.<br />
Also erreichen wir ja dann wohl so nur O(nlogn).</p>
<p>Leider lese ich jetzt in den posts immer wieder das die ein oder andere version nicht funktioniert....welche könnte denn jetzt passen - die von blogg? Aber braucht die auch wirklich nur O(nlogn) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340191</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Tue, 07 Aug 2007 13:36:49 GMT</pubDate></item></channel></rss>