<?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[unordered_set sortieren?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem mit dem unordered_set Datentyp der Standard-Library. Und zwar würde ich dieses gerne mittels std::sort sortieren, was allerdings nicht hinhaut. Nach Recherche mittles Google geht das nicht und der einzige Wege wäre das unordered_set in einen anderen Container zu kopieren und dann wieder zurück zu kopieren.</p>
<p>Diesen zusätzlichen Kopier-Vorgang will ich aber vermeiden. Gibt es wirklich keine andere, effizientere Möglichkeit ein unordered_set zu sortieren?</p>
<p>Grüße,<br />
hs</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324743/unordered_set-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 23:30:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324743.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Mar 2014 18:37:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 18:37:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem mit dem unordered_set Datentyp der Standard-Library. Und zwar würde ich dieses gerne mittels std::sort sortieren, was allerdings nicht hinhaut. Nach Recherche mittles Google geht das nicht und der einzige Wege wäre das unordered_set in einen anderen Container zu kopieren und dann wieder zurück zu kopieren.</p>
<p>Diesen zusätzlichen Kopier-Vorgang will ich aber vermeiden. Gibt es wirklich keine andere, effizientere Möglichkeit ein unordered_set zu sortieren?</p>
<p>Grüße,<br />
hs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391910</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Mar 2014 18:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 18:40:30 GMT]]></title><description><![CDATA[<p>Nein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391912</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 30 Mar 2014 18:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 18:52:05 GMT]]></title><description><![CDATA[<p>Du könntest die Elemente vom unordered_set in einen vector moven.</p>
<p>Aber warum kein normales set wenn du die Elemente sortiert haben möchtest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391913</guid><dc:creator><![CDATA[unordered_set|ordered_set]]></dc:creator><pubDate>Sun, 30 Mar 2014 18:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:04:38 GMT]]></title><description><![CDATA[<p>unordered_set|ordered_set schrieb:</p>
<blockquote>
<p>Aber warum kein normales set wenn du die Elemente sortiert haben möchtest?</p>
</blockquote>
<p>Weil ich pro Iteration viele Elemente in die Datenstruktur einfüge. Das Sortieren kann erst ganz am Ende erledigt werden, wenn alle Elemente hinzugefügt wurden. Ein normales set sortiert ja nach jedem Einfügevorgang, was in so einem Fall ja sehr schlecht ist.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Nein</p>
</blockquote>
<p>Danke für diese konstruktive Antwort <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="🙂"
    /><br />
Welche Datenstruktur würde sich dann besser für mein Vorhaben eignen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391914</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:15:43 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Ein normales set sortiert ja nach jedem Einfügevorgang, was in so einem Fall ja sehr schlecht ist.</p>
</blockquote>
<p>Nein, da wird nichts nachträglich sortiert. Das Element wird gleich an die richtige Stelle eingefügt.</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>Welche Datenstruktur würde sich dann besser für mein Vorhaben eignen?</p>
</blockquote>
<p>std::set natürlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391915</guid><dc:creator><![CDATA[aqe]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:31:07 GMT]]></title><description><![CDATA[<p>aqe schrieb:</p>
<blockquote>
<p>Nein, da wird nichts nachträglich sortiert. Das Element wird gleich an die richtige Stelle eingefügt.</p>
</blockquote>
<p>Ja, aber das &quot;an der richtigen Stelle Einfügen&quot; kostet doch auch?</p>
<p><a href="http://www.cplusplus.com/reference/set/set/insert/" rel="nofollow">std::set::insert</a> hat logarithmische Komplexität für die Einfügeoperation<br />
<a href="http://www.cplusplus.com/reference/unordered_set/unordered_set/insert/" rel="nofollow">std::unordered_set::insert</a> hat konstante Komplexität für die Einfügeoperation</p>
<p>Also ist das hier auf jeden Fall ungünstiger. Ich will erst ganz am Ende sortieren, wenn schon alle Elemente eingefügt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391917</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:34:46 GMT]]></title><description><![CDATA[<p>Sortieren: O(n * log(n))<br />
Einfügen in unordered_set: O(1)</p>
<p>Also ist es insgesamt besser, gleich ein set zu nehmen, als in ein unordered_set einzufügen und nachträglich zu sortieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391918</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:46:11 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Ich will erst ganz am Ende sortieren, wenn schon alle Elemente eingefügt sind.</p>
</blockquote>
<p>Warum nimmst Du dann nicht einfach einen std::vector?</p>
<p><sub>Edit:</sub> Und wenn nötig, nach dem Sortieren halt noch std::unique().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391920</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:40:33 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Sortieren: O(n * log(n))<br />
Einfügen in unordered_set: O(1)</p>
<p>Also ist es insgesamt besser, gleich ein set zu nehmen, als in ein unordered_set einzufügen und nachträglich zu sortieren.</p>
</blockquote>
<p>Das kann man nicht so allgemein sagen. Angenommen, es werden n verschiedene Elemente je m mal eingefügt.</p>
<p>Dann ist unordered_set+sortieren insgesamt O(n*m+n log n) und set O(n*m*log n) Wenn m asymptotisch grösser ist als log n (z.B. m=n), kann unordered_set+sortieren besser sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391921</guid><dc:creator><![CDATA[5rthsdfaser]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:46:35 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Warum nimmst Du dann nicht einfach einen std::vector?</p>
</blockquote>
<p>Weil ich gleichzeitig Elemente in O(1) finden können will.</p>
<p>5rthsdfaser schrieb:</p>
<blockquote>
<p>Das kann man nicht so allgemein sagen. Angenommen, es werden n verschiedene Elemente je m mal eingefügt.</p>
<p>Dann ist unordered_set+sortieren insgesamt O(n*m+n log n) und set O(n*m*log n) Wenn m asymptotisch grösser ist als log n (z.B. m=n), kann unordered_set+sortieren besser sein.</p>
</blockquote>
<p>Jo. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2391922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391922</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:49:09 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Warum nimmst Du dann nicht einfach einen std::vector?</p>
</blockquote>
<p>Weil ich gleichzeitig Elemente in O(1) finden können will.</p>
</blockquote>
<p>Warte mal, du willst Elemente konstant finden. Und unordered_set sortieren.<br />
Wenn du es sortiert hast, kannst du es aber nicht mehr in konstanter Zeit finden.<br />
In dubio pro std::vector, sag ich nur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391923</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 19:49:20 GMT]]></title><description><![CDATA[<p>Ok, wenn es wirklich viele Dubletten gibt, dann wär ein set wirklich nicht schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391924</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 30 Mar 2014 19:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 20:12:05 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Warte mal, du willst Elemente konstant finden. Und unordered_set sortieren.<br />
Wenn du es sortiert hast, kannst du es aber nicht mehr in konstanter Zeit finden.</p>
</blockquote>
<p>Echt? Wieso dass denn? Das wäre ja blöd <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>Nathan schrieb:</p>
<blockquote>
<p>In dubio pro std::vector, sag ich nur.</p>
</blockquote>
<p>Naja, vector ist hier glaub ich einfach nicht geeignet. Ich hab folgendes Szenario: Eine sehr lange Liste von Typen die Sortiert sein muss (nennen wir sie LISTE_1). Und eine zweite, ebenfalls sehr lange Liste vom gleichen Typ die nicht sortiert ist und auch nicht sortiert sein muss (das wäre dann LISTE_2).</p>
<p>Ich will jetzt Elemente von LISTE_2 nach LISTE_1 kopieren, aber nur wenn LISTE_1 diese noch nicht enthält. Danach sollen aus LISTE_1 alle Elemente entfernt werden, die nicht in LISTE_2 sind, außer eine gewisse Anzahl an fixen Elementen die nicht gelöscht werden. Nach allen Einfügevorgängen soll LISTE_1 wieder in einem sortieren Zustand vorliegen.</p>
<p>Mit nem vector hätte ich da etwa O(n^2), was ich unbedingt vermeiden will.</p>
<p>Hier ein kleines Beispiel, die fixen Werte sind mit x bezeichnet:</p>
<pre><code>// Ausgangslage
LISTE_1    LISTE_2
b          a
c          d
d
x

// Alle Elemente aus LISTE_2 zu LISTE_1 hinzufügen, die noch nicht in LISTE_1 sind:
LISTE_1    LISTE_2          
b          a
c          d
d
x
a

// Jetzt alle Elemente aus LISTE_1 entfernen, die nicht in LISTE_2 sind, außer fixe Elemente x:
LISTE_1    LISTE_2
d          a
x          d
a

// Abschließend soll LISTE_1 wieder in einen sortieren Zustand gebracht werden:
LISTE_1    LISTE_2
a          a
d          d
x
</code></pre>
<p>Das will ich letztendlich erreichen halt möglichst effizient.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391928</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Mar 2014 20:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 21:32:50 GMT]]></title><description><![CDATA[<p>Kannst du nicht einfach alle x in Liste 2 einfügen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391929</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 30 Mar 2014 21:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 20:38:13 GMT]]></title><description><![CDATA[<p>Also:</p>
<pre><code class="language-cpp">vector&lt;int&gt; liste_1, liste_2;
liste_1.erase(remove_if(liste_1.begin(), liste_2.end(), ist_fixes_element));
unordered_set&lt;int&gt; tmp(liste_2.begin(), liste_2.end());
liste_1.insert(liste_1.end(), tmp.begin(), tmp.end());
sort(liste_1.begin(), liste_1.end());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2391932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391932</guid><dc:creator><![CDATA[humm]]></dc:creator><pubDate>Sun, 30 Mar 2014 20:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 20:52:53 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Warte mal, du willst Elemente konstant finden. Und unordered_set sortieren.<br />
Wenn du es sortiert hast, kannst du es aber nicht mehr in konstanter Zeit finden.</p>
</blockquote>
<p>Echt? Wieso dass denn? Das wäre ja blöd <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>
</blockquote>
<p>Schau dir mal an wie Hashtables funktionieren.<br />
<a href="http://de.wikipedia.org/wiki/Hashtabelle" rel="nofollow">http://de.wikipedia.org/wiki/Hashtabelle</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391933</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 30 Mar 2014 20:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Sun, 30 Mar 2014 21:03:39 GMT]]></title><description><![CDATA[<p>Bau dir halt für den sortierten Zugriff einen Zeigervektor und sortier den. Dann kannst du über die unordered_map&lt;foo&gt; Elemente in konstanter<sup>1</sup> Zeit finden und sie über den vector&lt;foo*&gt; sortiert betrachten. Oder halt umgekehrt, je nachdem, was besser passt.</p>
<p><sup>1</sup>D.h. average-case-konstanter Zeit. Mit dem konstant komplexen Zugriff in Hashtables ist das so ne Sache; wenn zum Beispiel jemand dir nicht wohlgesonnenes die Schlüssel manipulieren kann, musst du mit linearer Komplexität rechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391936</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 30 Mar 2014 21:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Mon, 31 Mar 2014 06:57:51 GMT]]></title><description><![CDATA[<p>wie lang sind denn die Listen von denen wir hier reden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391955</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 31 Mar 2014 06:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Mon, 31 Mar 2014 10:12:31 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Kannst du nicht einfach alle x in Liste 2 einfügen?</p>
</blockquote>
<p>Könnte ich schon, aber das wäre sehr ungünstig weil Liste 2 in jedem Durchgang neu erstellt wird. Das heißt ich müsste die resultierende Liste auch in jedem Durchgang sortieren, was viel zu aufwändig wäre. Daher mach ich überhaupt erst das hin und her kopieren, dass die resultierende Liste 1 wirklich nur dann sortiert werden muss wenn wirklich nötig.</p>
<p>humm schrieb:</p>
<blockquote>
<p>Also:</p>
<pre><code class="language-cpp">vector&lt;int&gt; liste_1, liste_2;
liste_1.erase(remove_if(liste_1.begin(), liste_2.end(), ist_fixes_element));
unordered_set&lt;int&gt; tmp(liste_2.begin(), liste_2.end());
liste_1.insert(liste_1.end(), tmp.begin(), tmp.end());
sort(liste_1.begin(), liste_1.end());
</code></pre>
</blockquote>
<p>Ja, damit kopiert man dann halt wieder etliche Werte hin und her...</p>
<p>otze schrieb:</p>
<blockquote>
<p>wie lang sind denn die Listen von denen wir hier reden?</p>
</blockquote>
<p>Es sind string Listen wobei Liste 1 ca 7000 fixe Einträge hat (die also nie gelöscht werden). Dazu kommen noch die dynamischen Einträge aus Liste 2, deren Anzahl letztenlich der Benutzer bestimmt. Typische Größenordnung ist hier von ca. 1000 - 5000 Einträge.</p>
<p>Die strings in den Listen selbst sind etwa zwischen 1 und 20 chars lang, im Schnitt etwa 5-6 chars.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391978</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Mon, 31 Mar 2014 10:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Mon, 31 Mar 2014 20:45:20 GMT]]></title><description><![CDATA[<p>Nimm std::set bei den paar strings.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392086</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Mon, 31 Mar 2014 20:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Mon, 31 Mar 2014 20:50:53 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Es sind string Listen.</p>
</blockquote>
<p>Gut, dann halt</p>
<pre><code class="language-cpp">#include &lt;iterator&gt; // damit du dich nicht über Compiler-Fehler wunderst
vector&lt;string&gt; liste_1, liste_2;
liste_1.erase(remove_if(liste_1.begin(), liste_2.end(), ist_fixes_element));
unordered_set&lt;string&gt; tmp(make_move_iterator(begin(liste_2)), make_move_iterator(end(liste_2.end)));
liste_1.insert(liste_1.end(), make_move_iterator(begin(tmp)), make_move_iterator(end(tmp)));
sort(liste_1.begin(), liste_1.end());
</code></pre>
<p>Ich wette mit dir, dass das schneller ist, als alle deine optimierten Selbstversuche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392087</guid><dc:creator><![CDATA[humm]]></dc:creator><pubDate>Mon, 31 Mar 2014 20:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Tue, 01 Apr 2014 11:41:40 GMT]]></title><description><![CDATA[<p>humm schrieb:</p>
<blockquote>
<p>Gut, dann halt</p>
<pre><code class="language-cpp">#include &lt;iterator&gt; // damit du dich nicht über Compiler-Fehler wunderst
vector&lt;string&gt; liste_1, liste_2;
liste_1.erase(remove_if(liste_1.begin(), liste_2.end(), ist_fixes_element));
unordered_set&lt;string&gt; tmp(make_move_iterator(begin(liste_2)), make_move_iterator(end(liste_2.end)));
liste_1.insert(liste_1.end(), make_move_iterator(begin(tmp)), make_move_iterator(end(tmp)));
sort(liste_1.begin(), liste_1.end());
</code></pre>
<p>Ich wette mit dir, dass das schneller ist, als alle deine optimierten Selbstversuche.</p>
</blockquote>
<p>Nee, schon allein deswegen nicht weil hier in jedem Schritt alle dynamischen Elemente aus Liste 1 entfernt werden (ich geh mal davon aus du meinst ist_<em>nicht</em>_fixes_element als Filter Funktion, oder?). Daher müsste mit dieser Lösung in jedem Schritt sortiert werden, auch wenn es gar keinen neuen Elemente für Liste 1 gibt.</p>
<p>Also eigentlich will ich Source-Code parsen und Benutzer-Definierte keywords wie Klassennamen etc. zu einer Liste hinzufügen. Das heißt ja dass im Großteil der Fälle in denen der Benutzer tippt auch kein keyword verändert wird und daher die Liste nicht neu aufgestellt werden muss.</p>
<p>Deswegen lauf ich über den Code und adde alle solche Keywords wenn sie noch nicht in der Liste sind. Wenn bereits alle keywords in der Liste sind muss auch nichts verändert und damit nichts sortiert werden.</p>
<p>Problem ist halt wenn der Benutzer was löscht, zum Beispiel den letzten Buchstaben von &quot;MyClasss&quot; (nachdem er sich verschrieben hat zum Beispiel). Dann muss der Algorithmus ja checken dass das keyword &quot;MyClasss&quot; nicht mehr exisitiert und es löschen. Daher hab ich eine zweite Liste, in der alle aktuell tatsächlich gefundenen Einträge gespeichert werden. Diese zweite Liste wird dann mit der ersten Liste abgeglichen.</p>
<p>Ist das die normale Vorgehensweise für dieses Problem oder gibt es bessere Lösungen dafür?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392148</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Tue, 01 Apr 2014 11:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Tue, 01 Apr 2014 11:56:06 GMT]]></title><description><![CDATA[<p>Soweit ich das sehe parst du den gesamten Code, schreibst alle Keywords auf und benutzt dann einen extrem komplizierten Algorithmus um die erste Liste so wie die zweite Liste zu machen. Warum nicht gleich die aktuelle Liste nehmen bzw. einmal swap aufufen?</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>Ist das die normale Vorgehensweise für dieses Problem oder gibt es bessere Lösungen dafür?</p>
</blockquote>
<p><a href="http://clang.llvm.org/doxygen/group__CINDEX.html" rel="nofollow">libclang</a><br />
Das willst du nicht alles selber schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392149</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Tue, 01 Apr 2014 11:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Tue, 01 Apr 2014 12:12:47 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>Warum nicht gleich die aktuelle Liste nehmen bzw. einmal swap aufufen?</p>
</blockquote>
<p>Weil ich dann keine keywords, die sich nicht mehr im Code befinden, löschen kann!</p>
<p>Klar kann ich die aktuelle Liste nehmen und einfach gefundene keywords hinzufügen. Aber wenn der Benutzer ein bereits vorhandenes keyword verändert, dann soll das alte keyword gelöscht werden.</p>
<p>nwp3 schrieb:</p>
<blockquote>
<p><a href="http://clang.llvm.org/doxygen/group__CINDEX.html" rel="nofollow">libclang</a><br />
Das willst du nicht alles selber schreiben.</p>
</blockquote>
<p>Ja also so umfangreich zumindest nicht, aber prinzipiell schon. Ich will das halt lernen sowas zu bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392152</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Tue, 01 Apr 2014 12:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Tue, 01 Apr 2014 12:27:29 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Klar kann ich die aktuelle Liste nehmen und einfach gefundene keywords hinzufügen. Aber wenn der Benutzer ein bereits vorhandenes keyword verändert, dann soll das alte keyword gelöscht werden.</p>
</blockquote>
<p>Nicht hinzufügen, ersetzen.</p>
<pre><code>list = parseDocument();
wait_until_user_changed_document();
list = parseDocument();
//Tadaaa! Alle neuen keywords vorhanden und keine alten Keywords mehr drin
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392157</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Tue, 01 Apr 2014 12:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to unordered_set sortieren? on Tue, 01 Apr 2014 12:59:57 GMT]]></title><description><![CDATA[<pre><code>liste_1.insert(liste_1.end(), make_move_iterator(begin(tmp)), make_move_iterator(end(tmp)));
</code></pre>
<p>Und das findest du wirklich schoener als</p>
<pre><code>for( auto&amp; a : tmp )
    liste_1.push_back( move(a) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392159</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 01 Apr 2014 12:59:57 GMT</pubDate></item></channel></rss>