<?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[Wie finde die x größten Elemente einer Map -]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe eine Map mit ziemlich vielen Einträgen.</p>
<pre><code class="language-cpp">map&lt;Object , int&gt;
</code></pre>
<p>Ich suche jetzt die x Elemente der Map <strong>mit den größten &quot;int&quot;-Werten</strong>.<br />
Wie stelle ich das an ?</p>
<p>In meinem Fall sind die Eigenschaften von &quot;Object&quot; total egal, es geht nur um den Integer-Wert der in der Map abgelegt ist.</p>
<p>Für Hinweise bin ich dankbar !</p>
<p>Viele Grüße,<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145054/wie-finde-die-x-größten-elemente-einer-map</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 05:33:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145054.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Apr 2006 13:19:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 13:19:01 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe eine Map mit ziemlich vielen Einträgen.</p>
<pre><code class="language-cpp">map&lt;Object , int&gt;
</code></pre>
<p>Ich suche jetzt die x Elemente der Map <strong>mit den größten &quot;int&quot;-Werten</strong>.<br />
Wie stelle ich das an ?</p>
<p>In meinem Fall sind die Eigenschaften von &quot;Object&quot; total egal, es geht nur um den Integer-Wert der in der Map abgelegt ist.</p>
<p>Für Hinweise bin ich dankbar !</p>
<p>Viele Grüße,<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044000</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Mon, 24 Apr 2006 13:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 13:54:39 GMT]]></title><description><![CDATA[<p>Schau dir folgendes Beispiel mal an. Habe den Quelltextnicht getestet, würde mich also nicht verwundern, wenn ein paar Fehler drin sind. Vom Prinzip her müsste es aber funktionieren. Die map wird in eine andere map, in der sich Schlüssel und Wert vertauschen kopiert. Es wird eine multimap verwendet, da mehrere Werte gleich sein können. Ich kenne keine bessere Möglichkeit im Zusammenhang mit dem Container map.</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
  map&lt;int, int&gt; v;

  v.insert(pair&lt;int, int&gt;(1, 5));
  v.insert(pair&lt;int, int&gt;(2, 6));
  v.insert(pair&lt;int, int&gt;(3, 7));
  v.insert(pair&lt;int, int&gt;(4, 8));

  multimap&lt;int, int&gt; tmp;

  map&lt;int, int&gt;::const_iterator iter;
  for (iter=v.begin(); iter!=v.end(); ++iter)
    tmp.insert(pair&lt;int, int&gt;(iter-&gt;second, iter-&gt;first));

  for (iter=tmp.begin(); iter!=tmp.end(); ++iter)
    cout &lt;&lt; iter-&gt;first &lt;&lt; iter-&gt;second;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1044022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044022</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 24 Apr 2006 13:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 13:55:09 GMT]]></title><description><![CDATA[<p>Falls Dir die Assoziation zwischen dem int-Wert und dem Objekt gleich ist, kannst Du die int-Werte in einen std::vector&lt;int&gt; kopieren, std::sort benutzen.<br />
Andernfalls wuerde es sich vielleicht lohnen, eine Klasse zu kreieren, die das Objekt und den int-Wert vereinigt und statt der map gleich einen std::vector zu benutzen. Dazu definierst Du innerhalb der Klasse einen bool operator&lt;, der mittels des int-Wertes vergleicht. Dann kannst Du ebenfalls std::sort benuzten, nachdem Du einen vector aus der neuen Klasse angelegt hast.<br />
Es scheint mit ein wenig seltsam, eine map mit einem int als Wert anzulegen. Ich haette gedacht, dass es sinnvoller ist, den einfacheren Typen als Schluessel zu benutzen. V.a., da map ja schon sortiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044023</guid><dc:creator><![CDATA[tim_g]]></dc:creator><pubDate>Mon, 24 Apr 2006 13:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 14:09:23 GMT]]></title><description><![CDATA[<p>Den größten int-Wert bekommst du so raus:</p>
<pre><code class="language-cpp">#include &lt;utility&gt;

struct SmallerThan
{
	bool operator()(std::pair&lt;const Object, int&gt; &amp;lhs, std::pair&lt;const Object, int&gt; &amp;rhs)
    {
        return lhs.second &lt; rhs.second;
    }
};

std::max_element(myMap.begin(), myMap.end(), SmallerThan());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1044034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044034</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Apr 2006 14:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 16:17:17 GMT]]></title><description><![CDATA[<p>es geht um statistik. konkret darum, wie oft ein event vom typ &quot;Object&quot; vorkommt. Deswegen hier die ungewöhnliche Kombination &quot;int&quot; nicht als Key.</p>
<p>Das mit dem Kopieren werde ich mal probieren. Wenns bissel dauert macht nix <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>Danke soweit !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044160</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Mon, 24 Apr 2006 16:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 16:37:09 GMT]]></title><description><![CDATA[<p>Öhm, du kannst dir das Kopieren auch sparen und meinen Code benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044183</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Apr 2006 16:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 16:40:54 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Den größten int-Wert bekommst du so raus:<br />
...</p>
</blockquote>
<p>Ich suche ja aber nicht nur den größten Wert, sondern die x (2, 45, 156) größten Werte ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044194</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Mon, 24 Apr 2006 16:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 17:17:48 GMT]]></title><description><![CDATA[<p>Ich dacht, das würdest du jetzt selbst rauskriegen, wenn man dir erst mal zeigt, wie man den größten Wert bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044252</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Apr 2006 17:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 17:26:09 GMT]]></title><description><![CDATA[<p>*bing*</p>
<p>Michael E. schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;utility&gt;

struct SmallerThan
{
	bool operator()(std::pair&lt;const Object, int&gt; &amp;lhs, std::pair&lt;const Object, int&gt; &amp;rhs)
    {
        return lhs.second &lt; rhs.second;
    }
};

std::nth_element(myMap.begin(), myMap.end(), SmallerThan());
}
</code></pre>
</blockquote>
<p>Obiges müsste dann ja mein Problem lösen, oder ?</p>
<p>Bin nicht so fit in den std-Algorithmen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044263</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Mon, 24 Apr 2006 17:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 18:02:34 GMT]]></title><description><![CDATA[<p>Mist, jetzt hab ich mich selbst in was verrannt.</p>
<p>nth_element geht leider nicht, weil das nen Random Access Iterator erwartet, den map aber nicht bietet. Man könnte die Map natürlich aufsplitten, sodass die schon gefundenen Elemente rausfallen. Ist aber im Endeffekt alles viel zu aufwendig.</p>
<p>Nimm tim_gs Vorschlag oder sowas:</p>
<pre><code class="language-cpp">erstelle einen Vektor mit int-Wert + Zeiger
kopiere int-Wert von map in vector und speicher Position im Zeiger
sortiere vector
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1044286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044286</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Apr 2006 18:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 19:56:26 GMT]]></title><description><![CDATA[<p>Wäre auch nicht sehr effizient, da bei jedem Aufruf der Funktion erneut nach dem n-größtem Element gesucht wird und diese Zeit summiert sich auf Dauer. Vlt findet sich noch eine effizientere Möglichkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044433</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 24 Apr 2006 19:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 19:59:22 GMT]]></title><description><![CDATA[<p>Der Vektor ist solange gültig, wie sich die map nicht verändert. Diese Abhängigkeit wirst du nie rauskriegen. Also versteh ich nicht, worauf du hinauswillst <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044436</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Apr 2006 19:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Mon, 24 Apr 2006 20:01:34 GMT]]></title><description><![CDATA[<p>wenn die daten benötigt werden, ist die map in ihrem endzustand. es wird nichts weiter hinzugefügt oder gelöscht oder sortiert o.ä.<br />
sie bleibt so, wie sie ist und wird auch ziemlich bald (nach der noch fehlenden suche der größten elemente) gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044438</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Mon, 24 Apr 2006 20:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Tue, 25 Apr 2006 13:49:57 GMT]]></title><description><![CDATA[<p>habe ich mich wohl ein wenig schlecht ausgedrückt <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="🙂"
    /> folgendes möchte ich damit sagen. wenn das größte element gesucht wird, muss der Container durchlaufen werden. wenn das zweitgrößte element gesucht wird, muss der Container durchlaufen werden. wenn das ... usw.</p>
<p>wei der variante mit dem kopieren wird der container lediglich einmal durchlaufen und nach neuem Index geordnet sortiert. ich werde austesten, wie groß sich die Unterschiede im Bezug auf die Performance sind.</p>
<p>kennt niemand eine andere möglichkeit oder hat jemand eine andere Idee das problem zu lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044844</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 25 Apr 2006 13:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Tue, 25 Apr 2006 14:32:21 GMT]]></title><description><![CDATA[<p>bis jetzt habe ich keine schnellere möglichkeit gefunden, als die kopie in einem Container vom typ multimap (s. Post oben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044882</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 25 Apr 2006 14:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Tue, 25 Apr 2006 15:11:45 GMT]]></title><description><![CDATA[<p>ich machs jetzt so:</p>
<p>ich kopiere alle ints in einen vector<br />
diesen vector lasse ich sortieren.<br />
ich picke mir das x-te element heraus und speichere dessen wert.</p>
<p>dann gehe ich die ursprünhliche map einmal komplett durch und vergleiche jedes element mit dem aus dem vector gespeicherten element. wenn es größer ist, dann habe ich eines der x geforderten elemente gefunden.<br />
das funktioniert auch <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/1044925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044925</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Tue, 25 Apr 2006 15:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Wed, 12 Jul 2006 19:41:55 GMT]]></title><description><![CDATA[<p>*buddel*</p>
<p>lucky_tux schrieb:</p>
<blockquote>
<p>bei der variante mit dem kopieren wird der container lediglich einmal durchlaufen und nach neuem Index geordnet sortiert.</p>
</blockquote>
<p>Wenn ich das folgendermaßen tue:</p>
<pre><code class="language-cpp">map&lt;Obj, int&gt; map;
multimap&lt;int, Obj&gt; mulmap;

map&lt;Obj, int&gt;::iterator it;

for (it = map.begin(); it != map.end(); it++)
{
    mulmap.insert(make_pair(it-&gt;second, it-&gt;first));
}

multimap&lt;int, Obj&gt;::iterator iter;

for (iter = mulmap.begin(); iter != mulmap.end(); iter++)
{
  cout &lt;&lt; iter-&gt;first &lt;&lt; endl;
}
</code></pre>
<p>Dann sind die Schlüssel NICHT auf- oder absteigend sortiert, sondern relativ willkürlich.<br />
Beispielsweise</p>
<pre><code>2 1 1 2 2 3 3 3 3 2 3 1 2 3 3 3 2  usw
</code></pre>
<p>Das ist nicht befriedigend, weil ich sicherstellen muss, dass die ganz großen Zahlen (gibt auch welche im 100er Bereich) ganz vorne stehen.</p>
<p>Hat da jemand spontan eine Idee ?</p>
<p>Würde eine solche Konstruktion mein Problem lösen?<br />
Falls ja, was bräuchte man da zusätzlich ? Vergleichsoperation oderso ?</p>
<pre><code class="language-cpp">vector&lt;pair&lt;int, Obj&gt; &gt; vec;

map&lt;Obj, int&gt; map;
map&lt;Obj, int&gt;::iterator it;

for (it = map.begin(); it != map.end(); it++)
{
    vec.push_back(make_pair(it-&gt;second, it-&gt;first));
}

sort(vec.begin(), vec.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1096718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096718</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Wed, 12 Jul 2006 19:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wie finde die x größten Elemente einer Map - on Thu, 13 Jul 2006 07:39:19 GMT]]></title><description><![CDATA[<p>[selbstgespräch]</p>
<p>natürlich ist die ausgabe des iterators über die multimap sortiert. ich habe in meinem code einen kleinen fehler drin, den ich hier im beispiel natürlich nicht habe. deswegen funktionierte das nicht. also alls im lot.<br />
[/selbstgespräch]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096890</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Thu, 13 Jul 2006 07:39:19 GMT</pubDate></item></channel></rss>