<?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[Sortierproblem mit Maps und Vektoren]]></title><description><![CDATA[<p>Hi.</p>
<p>Ich habe folgendes Problem:<br />
In einer map&lt;string,int&gt; wird einer bestimmten Eigenschaft ihre Anzahl (wie oft sie vorkommt) zugeordnet. Anschließend möchte ich diese Map gerne mit einer Schleife durchlaufen, und zwar bei der Eigenschaft beginned wo die Anzahl (int) am höchsten ist. Das Problem ist nun, dass sich Maps (meines Wissens) nicht sortieren lassen bzw. automatisch sortiert werden - nur falsch herum. Vektoren zum Speichern der Anzahlen kommen auch nicht in Frage, da dann der Bezug zu den Eigenschaften fehlt.<br />
Was kann man da machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119019/sortierproblem-mit-maps-und-vektoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 19:06:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119019.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Aug 2005 16:26:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 16:26:04 GMT]]></title><description><![CDATA[<p>Hi.</p>
<p>Ich habe folgendes Problem:<br />
In einer map&lt;string,int&gt; wird einer bestimmten Eigenschaft ihre Anzahl (wie oft sie vorkommt) zugeordnet. Anschließend möchte ich diese Map gerne mit einer Schleife durchlaufen, und zwar bei der Eigenschaft beginned wo die Anzahl (int) am höchsten ist. Das Problem ist nun, dass sich Maps (meines Wissens) nicht sortieren lassen bzw. automatisch sortiert werden - nur falsch herum. Vektoren zum Speichern der Anzahlen kommen auch nicht in Frage, da dann der Bezug zu den Eigenschaften fehlt.<br />
Was kann man da machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859157</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:26:04 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 16:32:17 GMT]]></title><description><![CDATA[<p>Benutz einen Funktor, etwa so:</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
using namespace std;

class Sorter
{
public:
    bool operator ()(map&lt;string, int&gt;::iterator &amp;lhs, map&lt;string, int&gt;::iterator &amp;rhs)
    {
        return lhs-&gt;second &lt;= rhs-&gt;second;
    }
};

int main()
{
    map&lt;string, int&gt; foo;

    // fülle foo irgendwie

    sort(foo.begin(), foo.end(), Sorter());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/859159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859159</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 16:42:53 GMT]]></title><description><![CDATA[<p>Das hört sich schonmal gut an, aber bei dieser Zeiele</p>
<pre><code>sort(property_map_count.begin(), property_map_count.end(), Sorter());
</code></pre>
<p>bekomme ich folgenden Fehler den ich mir nicht erklären kann:</p>
<pre><code>(...)\stl_algo.h In function `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = std::_Rb_tree_iterator&lt;std::pair&lt;const std::string, int&gt; &gt;, _Compare = Sorter]': 
 2591 (...)\stl_algo.h no match for 'operator-' in '__last - __first' 
  note (...)\stl_bvector.h:180 candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&amp;, const std::_Bit_iterator_base&amp;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/859168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859168</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 16:45:28 GMT]]></title><description><![CDATA[<p>Probiers mal mit stable_sort() anstatt sort().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859172</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 16:52:30 GMT]]></title><description><![CDATA[<p>Nein, das hilft nicht. Jetzt wird zuerstmal diese Zeile</p>
<pre><code>std::__inplace_stable_sort(__first, __last, __comp);
</code></pre>
<p>in stl_algo.h angemeckert. Der gesamte Fehler unterscheidet sich nicht viel von dem vorherigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859178</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:05:09 GMT]]></title><description><![CDATA[<p>Hast du die Klasse Sorter an dein <strong>const</strong> string angepasst?</p>
<pre><code class="language-cpp">class Sorter
{
public:
    bool operator ()(const map&lt;const string, int&gt;::const_iterator &amp;lhs, const map&lt;const string, int&gt;::const_iterator &amp;rhs)    // direkt noch die Parameter const gemacht
    {
        return lhs-&gt;second &lt;= rhs-&gt;second;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/859185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859185</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:10:06 GMT]]></title><description><![CDATA[<p>Eine map wird nicht über std::sort sortiert. Das erfordert RandomAccessItertoren und die gibt es für die map nicht.<br />
Eine map sortiert sich selbst beim Einfügen.</p>
<p>Du musst beim Erzeugen der Map einen Comparator übergeben, der dein Vergleichskriterium enthält:</p>
<pre><code class="language-cpp">class Comp {
  public:
    bool operator( const string&amp; s1, const std::string s2) const 
    {
       return s1 &gt; s2; // oder was immer Du willst  
    }
};

void x()
{
   map&lt;string, int, Comp&gt; myMap;
  //   myMap.insert &lt;- fügt es an der Stelle gemäß obigen Kriterium ein
}
</code></pre>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859187</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:11:41 GMT]]></title><description><![CDATA[<p>Ich habe erst vor kurzem mit C++ angefangen und ich bin noch nicht in der Lage einen &quot;Funktor&quot; (von dem ich bis jetzt noch nie was gehört habe) anzupassen <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="😉"
    /><br />
Aber mit deiner neuen Version funktioniert es genau so wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859188</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:14:31 GMT]]></title><description><![CDATA[<p>Floele schrieb:</p>
<blockquote>
<p>Das Problem ist nun, dass sich Maps (meines Wissens) nicht sortieren lassen bzw. automatisch sortiert werden - nur falsch herum.</p>
</blockquote>
<p>Das kommt ganz darauf an - du kannst der Map als Template-parameter eine Comparator-Klasse mitgeben. Die ist per default std::less&lt;Key&gt;. Wenn du stattdessen std::greater&lt;Key&gt; (in deinem Fall also std::greater<a href="std::string" rel="nofollow">std::string</a>) einsetzt, wird sie genau andersrum sortiert. Da man den Comparator allerdings nur einmal angeben kann, lohnt sich das nur, wenn es okay ist, dass die Map IMMER so sortiert ist. (evtl. könnte man sonst per std::copy() die Elemente einer mit less&lt;&gt; sortierten map in eine mit greter&lt;&gt; sortierten map kopieren...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859192</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:16:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9698">@niemand</a></p>
<pre><code>63 (...) expected identifier before '(' token
</code></pre>
<p>in dieser Zeile:</p>
<pre><code>bool operator( const string&amp; s1, const std::string s2) const
</code></pre>
<p>Habe bisher mit Operatorüberladungen (oder was immer das ist) nicht gearbeitet, also wäre es schon schön wenn du mir einen Code geben könntest der fehlerfrei kompliert. Bis ich in C++ soweit bin wird es noch ein bisschen dauern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859196</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:23:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a></p>
<p>So ist es im Moment perfekt, also vielen Dank <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/859203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859203</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:24:05 GMT]]></title><description><![CDATA[<p>Moment, in Deinem ersten Post steht, dass Du nach int sortieren willst. Dann wäre die map falsch. Die map sortiert immer nach dem ersten Typ. Hier ein ausprobiertes Beispiel. Sortiert die Zahlen absteigend. Hoffe, das hilft weiter.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;string&gt;

using namespace std;

class Comp
{
public:
   bool operator()( const int i1, const int i2) const
   {
      return i1 &gt; i2;
   }
};

int main()
{
   map&lt;int, string, Comp&gt; x;
   x.insert( make_pair( 2, string( &quot;Hallo&quot;)));
   x.insert( make_pair( 5, string( &quot;Test&quot;)));
   x.insert( make_pair( 1, string( &quot;Welt&quot;)));
   x.insert( make_pair( 3, string( &quot;C++&quot;)));

   map&lt;int, string, Comp&gt;::const_iterator it = x.begin();
   map&lt;int, string, Comp&gt;::const_iterator const end = x.end();
   for( ; it != end; ++it) {
      cout &lt;&lt; it-&gt;first &lt;&lt; &quot; &quot; &lt;&lt; it-&gt;second &lt;&lt; endl;
   }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/859205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859205</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:32:11 GMT]]></title><description><![CDATA[<p>Haha, das habe ich auch grade gemerkt (mein erster Test sah so aus als wenn das wäre was ich brauche - war es aber doch nicht) <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 />
Gucke mir deinen Code direkt mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859212</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:33:03 GMT]]></title><description><![CDATA[<p>Wenn du nach value sortieren willst wird dir nichts anderes übrig bleiben als vor dem sortieren in einen vector umzukopieren.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;

typedef std::pair&lt;std::string, int&gt; string_int_pair;

class Sorter
{
public:
    bool operator ()(const string_int_pair &amp;lhs, const string_int_pair &amp;rhs) const {
        return lhs.second &lt; rhs.second;
    }
};

int main() {

   std::map&lt;std::string, int&gt; m;
   std::vector&lt;string_int_pair&gt; v;
   m.insert(std::make_pair(&quot;a&quot;,1 ));
   m.insert(std::make_pair(&quot;b&quot;,8 ));
   m.insert(std::make_pair(&quot;v&quot;,5 ));

   for(std::map&lt;std::string, int&gt;::iterator i = m.begin(); i != m.end(); ++i ) {
     v.push_back(*i);
   }

   std::cout &lt;&lt; &quot;unsorted\n&quot;;
   for(std::vector&lt;string_int_pair&gt;::iterator i = v.begin(); i != v.end(); ++i ) {
      std::cout &lt;&lt; (*i).first &lt;&lt; &quot; &quot; &lt;&lt; (*i).second &lt;&lt; std::endl;
   }

   std::sort(v.begin(), v.end(), Sorter()); 

   std::cout &lt;&lt; &quot;sorted\n&quot;;
   for(std::vector&lt;string_int_pair&gt;::iterator i = v.begin(); i != v.end(); ++i ) {
      std::cout &lt;&lt; (*i).first &lt;&lt; &quot; &quot; &lt;&lt; (*i).second &lt;&lt; std::endl;
   }
}
</code></pre>
<p>output</p>
<pre><code>unsorted
a 1
b 8
v 5
sorted
a 1
v 5
b 8
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859214</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:33:03 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:41:15 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9698">@niemand</a></p>
<p>Also so geht es auch nicht. Ich muss nämlich auch die Anzahl der Eigenschaften hin und wieder erhöhen. Deswegen hatte ich am Anfang map&lt;string,int&gt;, weil ich dann einfach map[&quot;Eigenschaft&quot;] += 1 machen konnte. Wie das bei dir funktionieren soll ist mir nicht ganz klar. Irgendwie müsste der Vektor dann ja auch aktualisert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859220</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:48:28 GMT]]></title><description><![CDATA[<p>Das ist klar. Du musst den vektor jedesmal neu erzeugen und sortieren wenn du die map nach value sortiert ausgeben möchtest. Eine bessere lösung fällt mir nicht ein.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859226</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:48:47 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7155">@ZuK</a></p>
<p>Sieht so aus als wenn es funktioniert. Ich werde es morgen mal in mein Programm einbauen und gucken wie es läuft, denke aber dass es jetzt stimmt. Ich melde mich dann nochmal.</p>
<p>Auf jeden Fall schonmal danke für das Interesse bzw. die zahlreichen Antworten <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/859228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859228</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Fri, 26 Aug 2005 17:50:14 GMT]]></title><description><![CDATA[<p>ZuK schrieb:</p>
<blockquote>
<p>Das ist klar. Du musst den vektor jedesmal neu erzeugen und sortieren wenn du die map nach value sortiert ausgeben möchtest. Eine bessere lösung fällt mir nicht ein.<br />
Kurt</p>
</blockquote>
<p>Das ist schon OK so denke ich, weil die Map <em>erst</em> erzeugt wird und <em>anschließend</em> ausgegeben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859231</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Fri, 26 Aug 2005 17:50:14 GMT</pubDate></item><item><title><![CDATA[Reply to Sortierproblem mit Maps und Vektoren on Sat, 27 Aug 2005 06:50:07 GMT]]></title><description><![CDATA[<p>So, es funktioniert. Also vielen Dank nochmal <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/859429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859429</guid><dc:creator><![CDATA[Floele]]></dc:creator><pubDate>Sat, 27 Aug 2005 06:50:07 GMT</pubDate></item></channel></rss>