<?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[Union unsortierter vectoren]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>folgende Aufgabe: ich möchte alle Elemente aus einem vector einem anderen hinzufügen, sofern sie dort noch nicht enthalten sind (Prüfung nicht über Gleichheit, sondern über eine Objekteigenschaft).</p>
<p>std::set_union schien mir zwar geeignet, allerdings verlangt der Algorithmus zum einen sortierte Eingangsdaten, zum anderen müsste ich einen temporären Ergebnis-vector erzeugen und diesen dann wieder meinem Ziel-vector zuweisen. Das scheint mir aus Performance-Gründen nicht ideal.</p>
<p>Ich habe jetzt folgenden Ansatz gewählt, bin mir aber bezüglich des Anhängens an &quot;dest&quot; mittels des back_inserters ein wenig unsicher, weil ich ja dabei den vector verändere, auf den ich find_if anwende. Ist das ok so, oder gibt es deutlich bessere Wege?</p>
<pre><code>std::vector&lt;Mytype&gt; source;
std::vector&lt;Mytype&gt; dest;

// Anzahl der Element in source deutlich kleiner als in dest

dest.reserve(dest.size() + source.size());
std::copy_if(source.begin(), source.end(), std::back_inserter(dest), [&amp;dest] (const MyType&amp; lhs)
{
    auto it = std::find_if(dest.begin(), dest.end(), [&amp;lhs] (const MyType&amp; rhs)
    {
        return lhs.SomeProperty() == rhs.SomeProperty();
    });

    return it == dest.end();
});
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/334371/union-unsortierter-vectoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 17:42:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334371.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Sep 2015 12:53:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Union unsortierter vectoren on Wed, 09 Sep 2015 12:53:18 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>folgende Aufgabe: ich möchte alle Elemente aus einem vector einem anderen hinzufügen, sofern sie dort noch nicht enthalten sind (Prüfung nicht über Gleichheit, sondern über eine Objekteigenschaft).</p>
<p>std::set_union schien mir zwar geeignet, allerdings verlangt der Algorithmus zum einen sortierte Eingangsdaten, zum anderen müsste ich einen temporären Ergebnis-vector erzeugen und diesen dann wieder meinem Ziel-vector zuweisen. Das scheint mir aus Performance-Gründen nicht ideal.</p>
<p>Ich habe jetzt folgenden Ansatz gewählt, bin mir aber bezüglich des Anhängens an &quot;dest&quot; mittels des back_inserters ein wenig unsicher, weil ich ja dabei den vector verändere, auf den ich find_if anwende. Ist das ok so, oder gibt es deutlich bessere Wege?</p>
<pre><code>std::vector&lt;Mytype&gt; source;
std::vector&lt;Mytype&gt; dest;

// Anzahl der Element in source deutlich kleiner als in dest

dest.reserve(dest.size() + source.size());
std::copy_if(source.begin(), source.end(), std::back_inserter(dest), [&amp;dest] (const MyType&amp; lhs)
{
    auto it = std::find_if(dest.begin(), dest.end(), [&amp;lhs] (const MyType&amp; rhs)
    {
        return lhs.SomeProperty() == rhs.SomeProperty();
    });

    return it == dest.end();
});
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2467394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2467394</guid><dc:creator><![CDATA[Unificator]]></dc:creator><pubDate>Wed, 09 Sep 2015 12:53:18 GMT</pubDate></item><item><title><![CDATA[Reply to Union unsortierter vectoren on Wed, 09 Sep 2015 13:48:01 GMT]]></title><description><![CDATA[<p>Ich sehe da kein Problem mit dem Verändern von <code>data</code> .<br />
Die Lösung braucht <code>N * M</code> Zeit, aber keinen zusätzlichen Platz. Wenn das schnell genug ist, warum nicht?<br />
Man kann das auf <code>N + M</code> verkürzen, wenn man ein Hashset der <code>SomeProperty</code> s statt <code>find_if</code> verwendet. Das braucht dann aber zusätzlichen Platz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2467408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2467408</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 09 Sep 2015 13:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to Union unsortierter vectoren on Wed, 09 Sep 2015 14:24:38 GMT]]></title><description><![CDATA[<p>Vielen Dank für den Hinweis.<br />
Vielleicht schaue ich mir das unordered_set mal an, auch wenn das in meinem Fall vielleicht ein wenig mit Kanonen auf Spatzen geschossen ist :-).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2467420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2467420</guid><dc:creator><![CDATA[Unificator]]></dc:creator><pubDate>Wed, 09 Sep 2015 14:24:38 GMT</pubDate></item></channel></rss>