<?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[Häufigste Zahl einer Zahlenreihe ermitteln]]></title><description><![CDATA[<p>Gibt es eine schnellere Methode um aus einem Vektor von positiven ints die häufigste Zahl zu finden als zwei ineinander verschachtelte for-Schleifen?</p>
<p>also in etwa so:</p>
<pre><code>std::vector&lt;int&gt; values;

int most_common = -1;
int max_occurance = 0;
int temp_occurance = 0;

for(std::size_t i = 0; i &lt; values.size(); ++i)
{
    for(std::size_t j = 0; j &lt; values.size(); ++j)
    {
        if(values[i] == values[j])
        {
            ++temp_occurance;
            if(temp_occurance &gt; max_occurance)
                most_common = values[j];
        }
    }
    max_occurance = temp_occurance;
    temp_occurance = 0;
}
</code></pre>
<p>mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319091/häufigste-zahl-einer-zahlenreihe-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 04:09:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319091.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Aug 2013 14:31:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 14:31:12 GMT]]></title><description><![CDATA[<p>Gibt es eine schnellere Methode um aus einem Vektor von positiven ints die häufigste Zahl zu finden als zwei ineinander verschachtelte for-Schleifen?</p>
<p>also in etwa so:</p>
<pre><code>std::vector&lt;int&gt; values;

int most_common = -1;
int max_occurance = 0;
int temp_occurance = 0;

for(std::size_t i = 0; i &lt; values.size(); ++i)
{
    for(std::size_t j = 0; j &lt; values.size(); ++j)
    {
        if(values[i] == values[j])
        {
            ++temp_occurance;
            if(temp_occurance &gt; max_occurance)
                most_common = values[j];
        }
    }
    max_occurance = temp_occurance;
    temp_occurance = 0;
}
</code></pre>
<p>mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343925</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 14:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 14:42:16 GMT]]></title><description><![CDATA[<p>Sortieren und Laenge der Gruppen zaehlen, Zeit O(n log n) und Platz O(1).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343927</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 14:42:16 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 14:42:23 GMT]]></title><description><![CDATA[<p>Einmal durchiterieren, zu jedem Wert die Häufigkeit mitzählen. O(N + N*log(M) + M), wobei M die Anzahl unterschiedlicher Werte ist. Mit einem Hashtable auch bis zu O(N + M). Oder einfach einem vector, wenn die Werte überschaubar sind, dann garantierte O(N + M).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343929</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Aug 2013 14:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:22:38 GMT]]></title><description><![CDATA[<p>Also vielen Dank erstmal, das ist auf jeden Fall schneller. <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>Setzt das einmal durch iterieren und häufigkeit zählen das vorherige sortieren voraus? (wüsste sonst nicht wie das gehen soll und wüsste es gerne)</p>
<p>Dann würd mans also so machen:</p>
<pre><code>std::vector&lt;int&gt; values;

int temp_max = 0, max = 0, highest = -1;

if(values.size() == 1) highest = values[0];
else if(values.size() &lt; 1) {}
else
{
std::sort(values.begin(), values.end());
for(std::size_t i = 1; i &lt; values.size(); ++i)
{
    if(values[i] == values[i-1])
    {
        ++temp_max;
        if(temp_max &gt; max)
            highest = values[i];
            max = temp_max;
    }
    else        
        temp_max = 0;
}
}//else
</code></pre>
<p>mfg<br />
HarteWare</p>
<p>P.S.: Soweit ich weiß, geht das Beiträge löschen aus bestimmten Gründen nicht (zumindest nicht für den normal-regisitrierten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343940</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:07:15 GMT]]></title><description><![CDATA[<p>Du koenntest einfach dazuschreiben, auf wen du dich beziehst ... Auch funktioniert dein Code nicht fuer Mengen mit nur einem Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343942</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:21:33 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Du koenntest einfach dazuschreiben, auf wen du dich beziehst ... Auch funktioniert dein Code nicht fuer Mengen mit nur einem Element.</p>
</blockquote>
<p>Ich habe in diesem Fall jeden gemeint, der sich angesprochen fühlt. Das wäre jeder, der, entweder geantwortet hat, oder der die Lösung zu meiner Frage kennt.<br />
An wen das P.S. war, denke ich ist auch recht klar.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a>: Danke für den Hinweis, werde es in Betracht ziehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> (etwas &quot;gehackt&quot;, aber es erfüllt seinen Zweck)</p>
<p>mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343944</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:26:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename I, typename Map=std::unordered_map&lt;typename std::iterator_traits&lt;I&gt;::value_type, std::size_t&gt; &gt;
std::pair&lt;typename std::iterator_traits&lt;I&gt;::pointer, std::size_t&gt;
most_frequent_element(I from, I to)
{
  typename std::iterator_traits&lt;I&gt;::pointer best = 0;
  std::size_t cnt = 0;
  for (Map m; from != to; ++from)
    if (++m[*from] &gt; cnt) {
      ++cnt;
      best = &amp;*from;
    }
  return std::make_pair(best, cnt);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343948</guid><dc:creator><![CDATA[stell]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:44:37 GMT]]></title><description><![CDATA[<p>stell schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename I, typename Map=std::unordered_map&lt;typename std::iterator_traits&lt;I&gt;::value_type, std::size_t&gt; &gt;
std::pair&lt;typename std::iterator_traits&lt;I&gt;::pointer, std::size_t&gt;
most_frequent_element(I from, I to)
{
  typename std::iterator_traits&lt;I&gt;::pointer best = 0;
  std::size_t cnt = 0;
  for (Map m; from != to; ++from)
    if (++m[*from] &gt; cnt) {
      ++cnt;
      best = &amp;*from;
    }
  return std::make_pair(best, cnt);
}
</code></pre>
</blockquote>
<p>Hui, da hab ich was zum analysieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Hast mich auch auf ein paar neue Sachen wie std::pair aufmerksam gemacht, mal gucken was dat alles is...</p>
<p>bei sowas ist es, vorallem für novizen wie mich, immer ganz nett wenn noch ein kurzes Anwendungsbeispiel dabei ist. Ich wüsste jetzt auf anhieb z.B. nicht, wie ich dieses Template benutzen sollte</p>
<p>Ich danke für die Antwort<br />
mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343952</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:48:38 GMT]]></title><description><![CDATA[<p>Klar, man kann ja schon beim Zählen gucken, welches Element das Häufigste ist. Da war ich mit meinem ersten Vorschlag etwas voreilig. So ist es sogar nur O(N*log(M)) (oder bis zu O(N) mit Tabelle). Was in so ziemlich allen Fällen besser sein sollte als die Sortiermethode. Allgemeines Bashing: Sortieren ist selten ein guter Ansatz für eine Lösung, außer das Problem ist, etwas zu sortieren <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/2343957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343957</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 15:59:44 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Allgemeines Bashing: Sortieren ist selten ein guter Ansatz für eine Lösung, außer das Problem ist, etwas zu sortieren <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>Sortieren ist gar nicht mal so langsam und vor allem verschwendet das keinen Speicher (O(1) statt O(n))</p>
<p>Dagegen lässt sich mein Ansatz leicht anpassen, dass die Elemente nicht kopiert werden müssen.</p>
<p>@Anwendungsbeispiel:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; values = ...
std::pair&lt;int*,size_t&gt; result = most_frequent_element(values.begin(), values.end());
// wenn values.size() == 0, dann ist result.first == NULL
std::cout &lt;&lt; *result.first &lt;&lt; &quot; kommt &quot; &lt;&lt; result.second &lt;&lt; &quot; mal vor\n&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343962</guid><dc:creator><![CDATA[stell]]></dc:creator><pubDate>Tue, 06 Aug 2013 15:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:01:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Klar, man kann ja schon beim Zählen gucken, welches Element das Häufigste ist. Da war ich mit meinem ersten Vorschlag etwas voreilig. So ist es sogar nur O(N*log(M)) (oder bis zu O(N) mit Tabelle). Was in so ziemlich allen Fällen besser sein sollte als die Sortiermethode. Allgemeines Bashing: Sortieren ist selten ein guter Ansatz für eine Lösung, außer das Problem ist, etwas zu sortieren <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>Mit einem Vector&lt;int&gt; werte; ? Ich komm nicht drauf wie das gehen sollte. Kannst vielleicht ein paar Zeilen Pseudecode rauslassen oder einen Tipp geben?</p>
<p>mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343964</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:04:23 GMT]]></title><description><![CDATA[<p>Nun, statt einer map eben eine unordered_map. Oder, wenn man weiß, dass die möglichen Werte überschaubar sind und man daher keine richtige Hashmap braucht, ein vector zum Mitzählen. So drückt man die Zugriffszeit von log(M) auf eine Konstante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343967</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:14:36 GMT]]></title><description><![CDATA[<p>@stell<br />
Die Anwendung ist auf jeden Fall simpler als der Code selbst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Ich habs mal abgespeichert falls ich sowas mal wieder benötige. (ernsthaft jetzt, benutze immernoch dieses skip_char&lt;&gt; template von <strong>out</strong> fürs &quot;Parsen&quot; von .txt Dateien <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
<p>Es ging bei mir lediglich um eine Aufgabe aus einem Buch und ich wusste dass die verschachtelte for-Schleife dafür einfach ... ist. Die Aufgaba kam zu einem Zeitpunkt wo ich theoretisch nur vector, diverse Operatoren, Schleifen, If-Abfragen und Datentypen kennen sollte, daher wäre alles andere &quot;geschummelt&quot;.</p>
<p>Hätte ich vielleicht auch früher sagen können^^ Aber ich denke das Thema ist soweit abgeschlossen, vielen Dank an alle Mitwirkenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>mfg<br />
HarteWare</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343972</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:17:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Allgemeines Bashing: Sortieren ist selten ein guter Ansatz für eine Lösung, außer das Problem ist, etwas zu sortieren</p>
</blockquote>
<p>Wenn ich die Laufzeit von irgendwas druecken moechte, was nicht schon O(n log n) ist, dann versuche ich es in ein Sortierproblem zu verwandeln. Viele geometrische Algorithmen basieren darauf. Und die Messung Sortierung vs. Hashtabelle moechte ich sehen. <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/2343974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343974</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:29:01 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Und die Messung Sortierung vs. Hashtabelle moechte ich sehen. <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>Ich eigentlich nicht, aber wenn hier der Hashtable nicht um Größenordnungen gewinnt, würde mich das wundern. Vielleicht nicht bei &lt; 100 Zahlen, aber die bessere Laufzeitkomplexität sollte ziemlich schnell gewinnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343977</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:28:56 GMT]]></title><description><![CDATA[<p>Um mal auf stells Ansatz aufzusetzen: Man kann Kopien der Werte im Vektor auch komplett vermeiden, indem man in der Hashmap Verweise speichert -- also auch die, die in der unordered_map angelegt werden. Es erfordert allerdings einen Kunstgriff -- verzeiht die wenig sprechende Nomenklatur:</p>
<pre><code class="language-cpp">#include &lt;cstddef&gt;
#include &lt;iostream&gt;
#include &lt;unordered_map&gt;
#include &lt;vector&gt;

template&lt;typename T&gt;
class hashref {
public:
  hashref(std::size_t index,
          std::vector&lt;T&gt; const &amp;container)
    : index_(index),
      container_(container) {
  }

  hashref const &amp;operator=(hashref const &amp;other) {
    index_ = other.index_;
    return *this;
  }

  bool operator==(hashref const &amp;other) const {
    return container_[index_] == other.container_[other.index_];
  }

  std::size_t hash () const { return std::hash&lt;T&gt;()(container_[index_]); }
  std::size_t index() const { return index_; }

private:
  std::size_t           index_;
  std::vector&lt;T&gt; const &amp;container_;
};

template&lt;typename T&gt;
struct refhash {
  std::size_t operator()(hashref&lt;T&gt; const &amp;val) const {
    return val.hash();
  }
};

template&lt;typename T&gt;
std::size_t index_of_most_frequent_value(std::vector&lt;T&gt; const &amp;vec) {
  std::unordered_map&lt;hashref&lt;T&gt;, unsigned, refhash&lt;T&gt;&gt; counters;
  hashref&lt;T&gt; result(0, vec);
  unsigned   result_count = 0;

  for(std::size_t i = 0; i &lt; vec.size(); ++i) {
    if(++counters[hashref&lt;T&gt;(i, vec)] &gt; result_count) {
      result = hashref&lt;T&gt;(i, vec);
      ++result_count;
    }
  }

  return result.index();
}

int main() {
  std::vector&lt;int&gt; data { 3, 3, 4, 1, 1, 1, 2, 3, 4, 3, 2, 2, 1, 0, 1, 3, 3, 3 };

  std::cout &lt;&lt; index_of_most_frequent_value(data) &lt;&lt; '\n';
  std::cout &lt;&lt; data[index_of_most_frequent_value(data)] &lt;&lt; '\n';
}
</code></pre>
<p>Das ist bei einem std::vector&lt;int&gt; nicht so richtig spannend, aber wenn mal komplexere Datentypen darinstecken (ich denke da in Richtung bigints) mag das was bringen. Oder wenn es std::vector&lt;std::unique_ptr&lt;foo&gt; &gt; ist oder so.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Und die Messung Sortierung vs. Hashtabelle moechte ich sehen.</p>
</blockquote>
<p>Wird gemacht. Aber ich kann dir jetzt schon sagen, dass die Hashtable bei immer größeren Datenmengen immer besser abschneiden wird. Jedenfalls, sofern die Daten aus einer vertrauenswürdigen Quelle stammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343978</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:45:17 GMT]]></title><description><![CDATA[<p>Mir fällt beim Benchen mit Zufallszahlen grad auf, dass der Hashtable-Ansatz nur dann sinnvoll mit großen Datenmengen funktionieren kann, wenn die Wertemenge relativ klein ist (also die Ints im Vektor nur eine begrenzte Menge verschiedener Int-Werte annehmen können). Ist das hier der Fall, und ggf. auf welchen Bereich sind die Werte beschränkt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343982</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 16:50:08 GMT]]></title><description><![CDATA[<p>HarteWare schrieb:</p>
<blockquote>
<p>Es ging bei mir lediglich um eine Aufgabe aus einem Buch und ich wusste dass die verschachtelte for-Schleife dafür einfach ... ist. Die Aufgaba kam zu einem Zeitpunkt wo ich theoretisch nur vector, diverse Operatoren, Schleifen, If-Abfragen und Datentypen kennen sollte, daher wäre alles andere &quot;geschummelt&quot;.</p>
<p>Hätte ich vielleicht auch früher sagen können^^ Aber ich denke das Thema ist soweit abgeschlossen, vielen Dank an alle Mitwirkenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2343985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343985</guid><dc:creator><![CDATA[Hinweis]]></dc:creator><pubDate>Tue, 06 Aug 2013 16:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Häufigste Zahl einer Zahlenreihe ermitteln on Tue, 06 Aug 2013 17:01:11 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Um mal auf stells Ansatz aufzusetzen: Man kann Kopien der Werte im Vektor auch komplett vermeiden, indem man in der Hashmap Verweise speichert -- also auch die, die in der unordered_map angelegt werden. Es erfordert allerdings einen Kunstgriff -- verzeiht die wenig sprechende Nomenklatur:</p>
</blockquote>
<p>Das geht sogar mit meiner ursprünglichen Funktion.</p>
<p>Man braucht nur zwei Helferklasssen:</p>
<pre><code class="language-cpp">template&lt;typename T, typename H=std::hash&lt;T&gt; &gt;
struct refhash : H {
  std::size_t operator()(std::reference_wrapper&lt;T&gt; const &amp;val) const {
    return static_cast&lt;H const&amp;&gt;(*this)(val);
  }
};
template &lt;typename T, typename E=std::equal_to&lt;T&gt; &gt;
struct refequal : E {
  std::size_t operator()(std::reference_wrapper&lt;T&gt; const &amp;lhs,
                         std::reference_wrapper&lt;T&gt; const &amp;rhs) const {
    return static_cast&lt;E const&amp;&gt;(*this)(lhs.get(), rhs.get());
  }
};
</code></pre>
<p>Und schon geht es ohne meine Funktion auch nur anzufassen:</p>
<pre><code class="language-cpp">most_frequent_element&lt;std::vector&lt;int&gt;::iterator,
                      std::unordered_map&lt;std::reference_wrapper&lt;int&gt;,
                                         std::size_t,
                                         refhash&lt;int&gt;,
                                         refequal&lt;int&gt; &gt; &gt;(...);
</code></pre>
<p>In meiner Messung (häufigstes Wort aus <a href="http://www.gutenberg.org/files/2600/2600.txt" rel="nofollow">http://www.gutenberg.org/files/2600/2600.txt</a> ) ist die Hashmap 6x schneller als das Sortieren, da sind die Daten aber auch wie geschaffen dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343991</guid><dc:creator><![CDATA[stell]]></dc:creator><pubDate>Tue, 06 Aug 2013 17:01:11 GMT</pubDate></item></channel></rss>