<?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[Array nach Häufigkeit sortieren]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich habe ein Array mit folgendem exemplarischen Inhalt:</p>
<p>(110 1011 10001 23 1011 1010 111 5 1011 1001 1001 14 10011 100 11 9)</p>
<p>Es besteht aus einem Zahlenmuster von 3 Zahlen gefolgt von einer Häufigkeitszahl die<br />
angibt wie oft das Muster vorgekommen ist. Also &quot;110 1011 10001&quot; ist das Muster be-<br />
stehend aus drei Zahlen und &quot;23&quot; ist die Zahl die angibt wie oft das Muster vorge-<br />
kommen ist. Jede Zahl hat aber seinen eigenen Index in dem Array. Die Reihenfolge<br />
ist aber immer gleich. Also 3 Zahlen (Zahlenmuster) gefolgt von einer Zahl die die Häufig-<br />
keit der vorangegangenen Zahlen (Zahlenmuster) angibt.</p>
<p>So, nun möchte ich die Zahlenmuster in dem Array nach den Häufigkeitszahlen sortieren<br />
ohne das die Zahlenmuster selbst verändert werden. Die Häufigkeitszahlen sollen dabei<br />
entfernt werden. Also der Output von dem obigen Beispiel wäre dann:</p>
<p>1011 1010 111 10011 100 11 1011 1001 1001 110 1011 10001</p>
<p>Vielleicht weiss jemand eine Lösung für das Problem oder kann mir irgendwie weiter-<br />
helfen? Wäre echt super, danke!</p>
<p>gruss, rommi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235783/array-nach-häufigkeit-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:27:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235783.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Mar 2009 11:58:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 11:58:52 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich habe ein Array mit folgendem exemplarischen Inhalt:</p>
<p>(110 1011 10001 23 1011 1010 111 5 1011 1001 1001 14 10011 100 11 9)</p>
<p>Es besteht aus einem Zahlenmuster von 3 Zahlen gefolgt von einer Häufigkeitszahl die<br />
angibt wie oft das Muster vorgekommen ist. Also &quot;110 1011 10001&quot; ist das Muster be-<br />
stehend aus drei Zahlen und &quot;23&quot; ist die Zahl die angibt wie oft das Muster vorge-<br />
kommen ist. Jede Zahl hat aber seinen eigenen Index in dem Array. Die Reihenfolge<br />
ist aber immer gleich. Also 3 Zahlen (Zahlenmuster) gefolgt von einer Zahl die die Häufig-<br />
keit der vorangegangenen Zahlen (Zahlenmuster) angibt.</p>
<p>So, nun möchte ich die Zahlenmuster in dem Array nach den Häufigkeitszahlen sortieren<br />
ohne das die Zahlenmuster selbst verändert werden. Die Häufigkeitszahlen sollen dabei<br />
entfernt werden. Also der Output von dem obigen Beispiel wäre dann:</p>
<p>1011 1010 111 10011 100 11 1011 1001 1001 110 1011 10001</p>
<p>Vielleicht weiss jemand eine Lösung für das Problem oder kann mir irgendwie weiter-<br />
helfen? Wäre echt super, danke!</p>
<p>gruss, rommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675175</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 11:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 12:05:13 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>die Häufigkeitszahlen können in dem neu sortieren Array auch drin bleiben. Wichtig ist aber dass die Muster nach Häufigkeit sortiert werden und die Muster selbst nicht verändert werden!</p>
<p>Gruss, rommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675181</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 12:08:27 GMT]]></title><description><![CDATA[<p>Ich denke mal da sollte Dir <a href="http://www.cppreference.com/wiki/stl/priority_queue/pqueue_constructors" rel="nofollow">std::priority_queue&lt;T&gt;</a> helfen.</p>
<p>Gut Schuß<br />
VuuRWerK <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/1675187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675187</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 12:14:37 GMT]]></title><description><![CDATA[<p>Erstens: Sortieren und weglassen, sind 2 Dinge, die auch getrennt behandelt werden sollten.</p>
<p>Zweitens: Zahlenmuster und Haeufigkeit gehoeren zusammen, also kann mann sie ja auch mal als explizit zusammengehoerig darstellen. Beispielsweise so:</p>
<pre><code>struct
{
    int muster[3];
    int count;
};
</code></pre>
<p>Wenn du Sortieralgorithmen der std benutzen moechtest ist vielleicht ein Zuweisungsoperator und copy-Constructor noetig. Dann schreibst du dir eine Kleiner-Gleich-Operation, die deine Relation spezifiziert. Ich habs mal hier zusammengefasst: <a href="http://www.developia.de/developia/viewarticle.php?cid=31792" rel="nofollow">Sortieren in C++ für Fortgeschrittene</a>.</p>
<p>Wie du jezt die Haeufigkeit weglaesst, kannst du dir allein ueberlegen (zumal sie ja auch nicht schadet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675194</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 13:05:54 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,<br />
dass mit der priority_queue schaut interessant aus. Das werd ich mir mal genauer anschauen. Danke erstmal! Gruss rommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675230</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 13:52:34 GMT]]></title><description><![CDATA[<p>rommi schrieb:</p>
<blockquote>
<p>Hallo Zusammen,<br />
dass mit der priority_queue schaut interessant aus. Das werd ich mir mal genauer anschauen. Danke erstmal! Gruss rommi</p>
</blockquote>
<p>Jaja, warum einfach, wenn es auch kompliziert geht. Es ist doch nur sortieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675284</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:52:34 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 13:59:46 GMT]]></title><description><![CDATA[<p>Hallo Knivil,</p>
<p>ein gutes Beispiel würde mehr sagen als tausend Worte <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>
<p>Gruss, rommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675289</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 14:09:53 GMT]]></title><description><![CDATA[<p>viel spaß <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

using namespace std;

template&lt;typename T&gt;
class zahlenkette
{
public:
    zahlenkette(const T *werte, int n)
    {
        int i;
        m_nZahlen = n-1;
        m_zahlen = new T[m_nZahlen];

        for (i = 0; i &lt; m_nZahlen; ++i)
            m_zahlen[i] = werte[i];
        m_haeufigkeit = werte[i];
    }

    zahlenkette(const zahlenkette &amp;z)
    {
        m_nZahlen = z.m_nZahlen;
        m_zahlen = new T[m_nZahlen];

        for (int i = 0; i &lt; m_nZahlen; ++i)
            m_zahlen[i] = z.m_zahlen[i];
        m_haeufigkeit = z.m_haeufigkeit;
    }

    zahlenkette &amp;operator=(const zahlenkette &amp;z)
    {
        m_nZahlen = z.m_nZahlen;
        delete [] m_zahlen;
        m_zahlen = new T[m_nZahlen];

        for (int i = 0; i &lt; m_nZahlen; ++i)
            m_zahlen[i] = z.m_zahlen[i];
        m_haeufigkeit = z.m_haeufigkeit;

        return *this;
    }

    ~zahlenkette()
    {
        delete [] m_zahlen;
    }

    T getHaeufigkeit() const { return m_haeufigkeit; }
    T getZahl(size_t i) const { return m_zahlen[i]; }

private:
    int m_nZahlen;
    T *m_zahlen;
    T m_haeufigkeit;
};

template&lt;typename T&gt;
bool zahlenkettenvergleich(const zahlenkette&lt;T&gt; &amp;a, const zahlenkette&lt;T&gt; &amp;b)
{
    return a.getHaeufigkeit() &lt; b.getHaeufigkeit();
}

int main()
{
    int test[] = {110, 1011, 10001, 23,
                1011, 1010, 111, 5,
                1011, 1001, 1001, 14,
                10011, 100, 11, 9};
    const int KETTENLAENGE_MIT_HAEUFIGKEIT = 4;
    const int ANZ_WERTE = sizeof(test)/sizeof(int);
    typedef zahlenkette&lt;int&gt; int_kette;

    vector&lt;int_kette&gt; ketten;
    for (int i = 0; i &lt; ANZ_WERTE; i+= KETTENLAENGE_MIT_HAEUFIGKEIT)
        ketten.push_back(int_kette(test + i, KETTENLAENGE_MIT_HAEUFIGKEIT));

    sort(ketten.begin(), ketten.end(), zahlenkettenvergleich&lt;int&gt;);

    for (size_t i = 0; i &lt; ketten.size(); ++i)
        for (int j = 0; j &lt; (KETTENLAENGE_MIT_HAEUFIGKEIT-1); ++j)
            cout &lt;&lt; ketten[i].getZahl(j) &lt;&lt; &quot; &quot;; //die sortierten zahlenketten evtl. in neues array kopieren
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1675303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675303</guid><dc:creator><![CDATA[sortierer]]></dc:creator><pubDate>Fri, 06 Mar 2009 14:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 14:11:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20944">@rommi</a>,<br />
Wie sieht dieses exemplarische Array denn im Programmcode aus?<br />
Ich würde nämlich gleich wie knivil vorgehen und das ganze in eine Struktur oder Klasse packen. Also immer 3 Zahlenfolgen und ihre Häufigkeit in eine Datenstruktur. Zudem einen <code>operator &lt;</code> für diese Datenstrukturen erstellen, welcher die Häufigkeit vergleicht. Diese Datenstrukturen in einem <code>std::vector</code> speichern und danach das folgende anwenden:<br />
<a href="http://www.cplusplus.com/reference/algorithm/sort_heap.html" rel="nofollow">http://www.cplusplus.com/reference/algorithm/sort_heap.html</a><br />
(Beispiel steht unten)</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675306</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 14:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 14:22:10 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Zudem einen <code>operator &lt;</code> für diese Datenstrukturen erstellen, welcher die Häufigkeit vergleicht.</p>
</blockquote>
<p>Mit Operatoren bin ich persönlich immer vorsichtig. Gerade bei Fällen, wo die Semantik nicht ganz eindeutig ist, finde ich einen Funktor oder eine Funktion geeigneter. Ein treffender Bezeichner sagt auch meistens mehr als das schlichte <code>&lt;</code> aus... <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/1675313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675313</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 14:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 15:39:57 GMT]]></title><description><![CDATA[<p>Ja, nu eigentlich sind es viele Dateien in einem Verzeichnis die alle im Aufbau<br />
gleich sind. Also erst 3 Werte dann die Häufigkeitszahl dann wieder 3 Werte usw.<br />
Den Inhalt jeder Datei lade ich Zeile für Zeile in ein Array (siehe unten steheden<br />
Code) und wenn alle Zeilen in das Array geladen sind würde ich gerne das Array<br />
sortieren und das sortierte Array wieder in die Datei zurückschreiben (überschreiben).<br />
Hier ein Beispiel für den Aufbau bzw. Inhalt so einer Datei:</p>
<p>================== test.txt:</p>
<p>110<br />
1011<br />
10001<br />
23<br />
1011<br />
1010<br />
111<br />
5<br />
1011<br />
1001<br />
1001<br />
14<br />
10011<br />
100<br />
11<br />
9</p>
<p>usw..</p>
<p>================ Hier ein Ausschnitt aus meinem Code</p>
<pre><code>for each (string tmp in vdateiname)		// Jede Datei durchlaufen
{
	//===== Inhalt der Kurzdatei in Array speichern
	ifstream datei(tmp.c_str());	

	while(getline(datei, zeile))		// Zeile für Zeile durchgehen
	{
		stringstream strzulolo(zeile);	// Typumwandulung string to long long 	
		strzulolo &gt;&gt; zahl;		
		vdatinhalt.push_back(zahl);	// Zeile in Array speichern
	}		
}

....
....
</code></pre>
<p>Vielleicht noch 2 Hinweise. Die Typ-Umwandlung (siehe Code) hat für den späteren<br />
Code noch eine Bedeutung und ist aber für meine Frage nicht relevant! Ausserdem<br />
können diese Zahlen z.B. 1011 auch ganz anders aussehen z.B. 4267123434534<br />
Also das sind keine Binärzahlen ich habe dass nur gemacht um diese Zahle besser<br />
von den Häufigkeitszahlen zu abstarahieren (sorry!)</p>
<p>Eigentlich hat mich jemand gefragt ob man sowas mit C++ machen kann. Ich hab<br />
gesagt ich versuchs aber leider mach ich auch erst seit ein paar Wochen mit<br />
C++ rum und in meinem C++Buch steht zu diesem Thema nicht soviel drin was<br />
mich jetzt wirklich weiterbringt. Jetzt bin ich halt am überleg überleg überleg ...<br />
Evtl. könnte ich es über eine zweite Liste und dann über ne zwei verschachtelte<br />
for-Schleifen machen aber ob dass das wahre ist?!</p>
<p>Auf jeden Fall erstmal megamässigen Dank an alle für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675370</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 15:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 16:06:32 GMT]]></title><description><![CDATA[<p>Umm...</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

struct NumbersWithFrequency
{
	long numbers[3];
	long frequency;
};

std::istream&amp; operator &gt;&gt;(
	std::istream&amp; input,
	NumbersWithFrequency&amp; obj)
{
	input &gt;&gt; obj.numbers[0];
	input &gt;&gt; obj.numbers[1];
	input &gt;&gt; obj.numbers[2];

	input &gt;&gt; obj.frequency;

	return input;
}

std::ostream&amp; operator &lt;&lt;(
	std::ostream&amp; output,
	NumbersWithFrequency const&amp; obj)
{
	output &lt;&lt; obj.numbers[0] &lt;&lt; '\n';
	output &lt;&lt; obj.numbers[1] &lt;&lt; '\n';
	output &lt;&lt; obj.numbers[2];

	return output;
}

bool operator &lt;(
	NumbersWithFrequency const&amp; lhs,
	NumbersWithFrequency const&amp; rhs)
{
	return lhs.frequency &lt; rhs.frequency;
}

// Sorry Nexus, bin zu faul einen Funktor zu machen :)

int main()
{
	std::ifstream inFile(&quot;./inout.txt&quot;);
	std::vector&lt;NumbersWithFrequency&gt; data;

	std::copy(
		std::istream_iterator&lt;NumbersWithFrequency&gt;(inFile),
		std::istream_iterator&lt;NumbersWithFrequency&gt;(),
		std::back_inserter(data));

	std::make_heap(data.begin(), data.end());
	std::sort_heap(data.begin(), data.end());

	inFile.close();

	std::ofstream outFile(&quot;./inout.txt&quot;);

	std::copy(
		data.begin(),
		data.end(),
		std::ostream_iterator&lt;NumbersWithFrequency&gt;(outFile, &quot;\n&quot;));

	return 0;
}
</code></pre>
<p>Mist ... jetzt wollte ich eigentlich nur kurze Hilfestellungen geben, damit du selber drauf kommst, aber der Code ist mir nur so aus den Finger geflutscht. Und ich kann mich nicht beherrschen und ihn jetzt einfach löschen ...</p>
<p>Ehm, Fragen? <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 />
Vielleicht noch eine C++ Referenz:<br />
<a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a></p>
<p>Kommentieren tue ich den Code jetzt nicht. Bin ich wiederrum zu faul.</p>
<p>*am liebsten den Code löschen möchte*</p>
<p>Grüssli</p>
<p>PS: Du kannst den Code Copy&amp;Pasten, aber er ist nicht so optimal. Sollte schliesslich ursprünglich nur ein Hinweis werden. Und ich hoffe du tust es auch nicht, sondern fragst nach, damit du den Code auch verstehst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675378</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 16:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 16:43:51 GMT]]></title><description><![CDATA[<p>rommi schrieb:</p>
<blockquote>
<p>Hallo Knivil,</p>
<p>ein gutes Beispiel würde mehr sagen als tausend Worte <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>
<p>Gruss, rommi</p>
</blockquote>
<p>Da ist ein Link und damals habe ich es geschafft, alles auf 3 Seiten zusammenzufassen, was man ueber Sortieren in C++ wissen sollte. Da sind auch 3 Beispiele enthalten. Ich versuche es zu vermeiden, copy-paste-Loesungen anzubieten, da hat man ja nicht mal 'ne Chance nachzudenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675401</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 16:43:51 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 18:10:18 GMT]]></title><description><![CDATA[<p>Da ich ja das Beispiel mit der priority_queue gebracht habe fühlte ich mich kurz dazu genötigt ein Beispiel zu implementieren :&gt;</p>
<p>Aber Vorsicht, sehr quick and dirty!!!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;queue&gt;
#include &lt;algorithm&gt;

typedef struct {
	std::string* bits;
	int amount;
} file_content;

struct compare {
	int operator()(const file_content&amp; c1, const file_content&amp; c2) {
		return c1.amount &lt; c2.amount;
	}
};

void read_file() {
	std::ifstream in(&quot;test.txt&quot;);
	std::string line;
	std::priority_queue&lt;file_content,
		std::vector&lt;file_content&gt;,
		compare&gt; q;
	int c = 0;
	file_content content;
	content.bits = new std::string[3];
	while (getline(in, line)) {
		if (c &lt; 3) {
			content.bits[c++] = line;
		} else if (c == 3) {
			content.amount = atoi(line.c_str());
			q.push(content);
			content.bits = new std::string[3];
			content.amount = 0;
			c = 0;
		}
	}
	delete[] content.bits; // for all the squealers ...
	in.close();
	std::cout &lt;&lt; &quot;*** sorted by amount ***&quot; &lt;&lt; std::endl;
	while(!q.empty()) {
		file_content c = q.top();
		std::cout &lt;&lt; &quot;bits(amount: &quot; &lt;&lt; c.amount &lt;&lt; &quot;): &quot;;
		for (unsigned int j = 0; j &lt; 3; ++j)
			std::cout &lt;&lt; c.bits[j] &lt;&lt; &quot; | &quot;;

		std::cout &lt;&lt; std::endl;
		q.pop();
	}
}

int main(int argc, char* argv[]) {
	read_file();
	return 0;
}
</code></pre>
<p>Das per Hand sortieren wie es ebenfalls vorgeschlagen wurde ist natürlich auch möglich aber mit der priority_queue ist es halt <em>immer</em> sortiert vorliegend.</p>
<p>Gut Schuß<br />
VuuRWerK <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>[edit]Speicher freigegeben. (Da dies wirklich nicht schön ist, auch nicht bei einem quick-and-dirty Beispiel ...)[/edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675423</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 17:51:02 GMT]]></title><description><![CDATA[<p>Von dem Code meines Vorposters rate ich ab.</p>
<pre><code class="language-cpp">content.bits = new std::string[3];
</code></pre>
<p>Bereits bei dieser Zeile stellen sich mir vier Fragen:</p>
<ul>
<li>Wieso braucht es einen Zeiger?</li>
<li>Warum ein Array von 3 <code>std::string</code> s?</li>
<li>Wo wird der angeforderte Speicher freigegeben?</li>
<li>Weshalb nimmt man nicht gleich einen Konstruktor, um die Initialisierung sicherzustellen?</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1675436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675436</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 17:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 17:55:45 GMT]]></title><description><![CDATA[<p>Dravere hat eindeutig den besten Code (wir sollen 'ne Abstimmung machen). Die beiden anderen finde ich grausam, halt quick and dirty. Da es aber oeffentlich und fuer alle ansehbar ist, sollte man sich schon etwas Muehe geben. Da brauche ich mich nicht zu wundern, warum mein Arbeitsplatz sicher ist.</p>
<p>Ich frage mich nur: Warum make_heap, sort_heap, wenn es ein einfaches sort auch tut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675440</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 17:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 17:58:39 GMT]]></title><description><![CDATA[<p>Ich hoffe Du hast folgendes gelesen:</p>
<blockquote>
<p>Aber Vorsicht, sehr quick and dirty!!!</p>
</blockquote>
<p>Eigentlich wollte ich noch dazuschreiben das ich es so nie machen würde aber das fand ich überflüssig weil es selbstverständlich ist, es ging mir nur darum ein kurzes Beispiel zu liefern wie man es mit priority_queue machen kann, fertig. Zudem wollte ich nicht mehr als 3 minuten investieren.</p>
<p>Aber ich muss mich eigentlich nicht rechtfertigen ...</p>
<p>Gut Schuß<br />
VuuRWerK <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>[edit]Mein Arbeitsplatz ist ebenfalls sicher weil ich obiges nicht abliefern würde, aber wie schon gesagt ...[/edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675444</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Fri, 06 Mar 2009 17:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 18:02:17 GMT]]></title><description><![CDATA[<p>Nein, du musst dich nicht rechtfertigen. Ich habe gelesen, dass es quick and dirty ist. Es ist eher ein allgemeines Phaenomen. Leider wird sowas dann erstmal von Anfaengern gern ungefragt uebernommen. Bei zwei Seiten gibt es manchmal auf beiden Seiten &quot;Schuld&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675449</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 18:03:10 GMT]]></title><description><![CDATA[<p>VuuRWerK schrieb:</p>
<blockquote>
<p>Ich hoffe Du hast folgendes gelesen:</p>
<blockquote>
<p>Aber Vorsicht, sehr quick and dirty!!!</p>
</blockquote>
<p>Eigentlich wollte ich noch dazuschreiben das ich es so nie machen würde aber das fand ich überflüssig weil es selbstverständlich ist, es ging mir nur darum ein kurzes Beispiel zu liefern wie man es mit priority_queue machen kann, fertig. Zudem wollte ich nicht mehr als 3 minuten investieren.</p>
</blockquote>
<p>Ja, das habe ich in der Tat gelesen. Vielleicht wäre es sinnvoller gewesen, kein Codebeispiel zu liefern. Das ist jetzt nicht böse gemeint, aber als Anfänger nimmt man sich viel zu schnell ein Beispiel an deinem Code. Zumal die Einstellung &quot;Hauptsache, es geht, Code ist ja egal&quot; unter Anfängern sehr verbreitet ist.</p>
<p>Aber abgesehen davon: Selbst in den drei Minuten wäre es nicht nur möglich gewesen, sondern auch einfacher und kürzer gegangen, ein String-Objekt anstelle eines Zeigers zu nehmen.</p>
<p>VuuRWerK schrieb:</p>
<blockquote>
<p>Aber ich muss mich eigentlich nicht rechtfertigen ...</p>
</blockquote>
<p>Nicht? Warum tust du es dann? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675450</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 18:03:42 GMT]]></title><description><![CDATA[<p>Phewww, das ist ja ne Menge Holz <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>Ich schau mir jetzt mal eins nach dem anderen in Ruhe an, schliesslich sollte man erstmal langsam anfangen! Jetzt hab ich gedacht &quot;Deutsche Sprache schwere Sprache&quot; aber seitdem ich C-- gesehen habe...</p>
<p>@Daravere:<br />
Kann jedem mal passieren dass einem soein Ding rausflutschschschscht.<br />
Gaaaanz ehrlich ich hab mir deinen Code garnicht angeschaut. Ich weiss praktisch garnix davon... Trotdem lieb von dir!</p>
<p>Auf jeden Fall nochmal Danke, und wenns nach mir gehen würde bekommt Ihr<br />
für den Rest des Tages frei <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1675451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675451</guid><dc:creator><![CDATA[rommi]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 18:08:22 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>VuuRWerK schrieb:</p>
<blockquote>
<p>Ich hoffe Du hast folgendes gelesen:</p>
<blockquote>
<p>Aber Vorsicht, sehr quick and dirty!!!</p>
</blockquote>
<p>Eigentlich wollte ich noch dazuschreiben das ich es so nie machen würde aber das fand ich überflüssig weil es selbstverständlich ist, es ging mir nur darum ein kurzes Beispiel zu liefern wie man es mit priority_queue machen kann, fertig. Zudem wollte ich nicht mehr als 3 minuten investieren.</p>
</blockquote>
<p>Ja, das habe ich in der Tat gelesen. Vielleicht wäre es sinnvoller gewesen, kein Codebeispiel zu liefern. Das ist jetzt nicht böse gemeint, aber als Anfänger nimmt man sich viel zu schnell ein Beispiel an deinem Code. Zumal die Einstellung &quot;Hauptsache, es geht, Code ist ja egal&quot; unter Anfängern sehr verbreitet ist.</p>
<p>Aber abgesehen davon: Selbst in den drei Minuten wäre es nicht nur möglich gewesen, sondern auch einfacher und kürzer gegangen, ein String-Objekt anstelle eines Zeigers zu nehmen.</p>
</blockquote>
<p>Stimm ich Dir auch voll und ganz zu, aber ich war nicht davon ausgegangen das er völliger Anfänger ist.<br />
Hab es oben aber mal editiert damit wenigstens der Speicher frei gegeben wird wie es sich natürlich auch gehört!</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>VuuRWerK schrieb:</p>
<blockquote>
<p>Aber ich muss mich eigentlich nicht rechtfertigen ...</p>
</blockquote>
<p>Nicht? Warum tust du es dann? :p</p>
</blockquote>
<p>Da ich weiß das ich es besser kann und mich ein wenig angekratzt gefühlt habe <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>Gut Schuß<br />
VuuRWerK <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/1675456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675456</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Fri, 06 Mar 2009 18:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 19:22:40 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Ich frage mich nur: Warum make_heap, sort_heap, wenn es ein einfaches sort auch tut?</p>
</blockquote>
<p>Weil bei <code>std::sort</code> nicht definiert ist, was für ein Sortieralgorithmus verwendet wird. Es wäre korrekt, wenn ein Bubblesort im Hintergrund verwendet wird. Ich glaube allerdings, dass meistens ein Quicksort verwendet wird. Der kann aber im Worstcase Szenario auf O(n^2) gehen, ist aber eher unwahrscheinlich. Ein Heapsort dagegen hat eine sichere Laufzeit von O(n*log(n)). Der Heapsort ist eines der schnellsten instabilen Sortierverfahen. Informationen dazu:<br />
<a href="http://de.wikipedia.org/wiki/Sortieralgorithmen" rel="nofollow">http://de.wikipedia.org/wiki/Sortieralgorithmen</a></p>
<p>rommi schrieb:</p>
<blockquote>
<p>@Daravere:<br />
Kann jedem mal passieren dass einem soein Ding rausflutschschschscht.<br />
Gaaaanz ehrlich ich hab mir deinen Code garnicht angeschaut. Ich weiss praktisch garnix davon... Trotdem lieb von dir!</p>
</blockquote>
<p>Grad garnix? Hmmm, ok.<br />
Dann vielleicht doch ein paar Hilfestellungen, mal schauen:<br />
1. Statt <code>getline</code> könntest du gleich die Zahlen über den <code>operator &gt;&gt;</code> einlesen. Leerzeichen werden automatisch ignoriert.<br />
2. Was ich gemacht habe, ist eine Struktur zu erstellen, welche eine eigene Überladung für den <code>operator &gt;&gt;</code> auf einen <code>std::istream</code> (Basisklasse von <code>std::ifstream</code> ) hat. Die Struktur speichert immer 3 Zahlen und die Häufigkeit.<br />
3. Ich lese nun immer solche Strukturen als ganzes ein und speichere sie in einem <code>std::vector</code> ab.<br />
4. Die Struktur hat einen <code>operator &lt;</code> , welcher die Häufigkeit vergleicht. Dadurch ist es mir möglich herauszufinden, welche Häufigkeit mit welchen Zahlen zuerst kommen soll.<br />
5. Die Sortierung lagere ich allerdings an Standardfunktionen aus. <code>std::make_heap</code> bereitet die Sortierung vor und <code>std::sort_heap</code> führt die Sortierung schlussendlich durch.<br />
6. Schlussendlich habe ich für die Struktur noch den <code>operator &lt;&lt;</code> überladen auf einen <code>std::ostream</code> (Basisklasse von <code>std::ofstream</code> ). Bei der Ausgabe, werden nur die Zahlen ausgegeben und jeweils durch ein Linefeed (neue Zeile) getrennt. Ich gebe also einfach alle Strukturen in meinem <code>std::vector</code> an den Stream.</p>
<p>Das ganze habe ich &quot;vereinfacht&quot; mit Funktionen und Strukturen aus der Standardbibliothek, wie <code>std::copy</code> , <code>std::ostream_iterator</code> oder <code>std::istream_iterator</code> .</p>
<p>Aber vielleicht bringt dich dies nun auf die Idee, welche ich genutzt habe.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675485</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 19:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 19:28:43 GMT]]></title><description><![CDATA[<blockquote>
<p>std::sort nicht definiert ist, was für ein Sortieralgorithmus verwendet wird</p>
</blockquote>
<p>Keine Ahnung was der Standard sagt, aber auf der Seite von SGI steht O( n log n ) als worst case. Ja, der Sortieralgorithmus ist nicht angegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675488</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 06 Mar 2009 19:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 19:42:01 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Der Heapsort ist eines der schnellsten instabilen Sortierverfahen.</p>
</blockquote>
<p>lies auch <a href="http://de.wikipedia.org/wiki/Introsort" rel="nofollow">http://de.wikipedia.org/wiki/Introsort</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675493</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Mar 2009 19:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array nach Häufigkeit sortieren on Fri, 06 Mar 2009 20:05:50 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Keine Ahnung was der Standard sagt, aber auf der Seite von SGI steht O( n log n ) als worst case. Ja, der Sortieralgorithmus ist nicht angegeben.</p>
</blockquote>
<p>Der Standard sagt, dass es ca. O(n * log(n)) sein muss. Aber eben nur ca., vorgeschrieben ist es nicht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>,<br />
Ja, ist mir bekannt. Heapsort bleibt aber einer der schnellsten. Ich sagte ja nicht der schnellste. Introsort wird übrigens auch auf Wikipedia im Artikel von Quicksort erwähnt.<br />
Danke trotzdem für den Link.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675505</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Mar 2009 20:05:50 GMT</pubDate></item></channel></rss>