<?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[set_intersection &#x2F;difference bei maps&#x2F;sets]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab eine Frage. Wie kann ich die methoden set_intersection bzw. set_difference bei sets/maps ausführen ?</p>
<p>Mein Ansatz ist:</p>
<pre><code class="language-cpp">map&lt;string,int&gt; myMap1, myMap2, myMap3;

//füllen von myMap1 &amp; myMap2

set_intersection(myMap1.begin(),myMap1.end(),myMap2.begin(),myMap2.end(), myMap3.begin());
</code></pre>
<p>erhalte aber immer eine Fehlermeldung <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/139420/set_intersection-difference-bei-maps-sets</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 04:23:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139420.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Mar 2006 14:58:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Mon, 06 Mar 2006 14:58:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab eine Frage. Wie kann ich die methoden set_intersection bzw. set_difference bei sets/maps ausführen ?</p>
<p>Mein Ansatz ist:</p>
<pre><code class="language-cpp">map&lt;string,int&gt; myMap1, myMap2, myMap3;

//füllen von myMap1 &amp; myMap2

set_intersection(myMap1.begin(),myMap1.end(),myMap2.begin(),myMap2.end(), myMap3.begin());
</code></pre>
<p>erhalte aber immer eine Fehlermeldung <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1009822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009822</guid><dc:creator><![CDATA[Laser]]></dc:creator><pubDate>Mon, 06 Mar 2006 14:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Mon, 06 Mar 2006 21:07:52 GMT]]></title><description><![CDATA[<p>ist ja interessant 'set_intersection' auf map's anzuwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Deine Fehlermeldung ist die des Compilers, der besagt, dass er einem pair&lt; const string, int &gt; nichts zuwesien kann. Was ok ist, da der Iterator einer map kein Output-Iterator ist.<br />
Als 5. Parameter von 'set_intersection' wird aber ein Output-Iterator verlangt.</p>
<p>Versuch' mal</p>
<pre><code class="language-cpp">#include &lt;iterator&gt;     // inserter
    // ...
    set_intersection( myMap1.begin(), myMap1.end(), myMap2.begin(), myMap2.end(), 
        inserter( myMap3, myMap3.end() ) );
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010127</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 06 Mar 2006 21:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Tue, 07 Mar 2006 11:54:17 GMT]]></title><description><![CDATA[<p>Jetzt funktionierts <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 />
Ist es auch möglich bei set_difference nur zu vergleichen ob die Keys übereinstimmen ?<br />
Bis jetzt werden die Elemente nur in myMap3 geschrieben, wenn sowohl die Keys und values übereinstimmen.<br />
Das heisst wenn in mymap1 [&quot;der&quot;,1] steht und in mymap2[&quot;der&quot;,4] so ist &quot;der&quot; nicht in der Schnittmenge vorhanden, was ich aber gerne hätte.<br />
Ist es möglich dass mit der Standardfunktion set_intersection zu erreichen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010441</guid><dc:creator><![CDATA[Laser]]></dc:creator><pubDate>Tue, 07 Mar 2006 11:54:17 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Tue, 07 Mar 2006 11:56:08 GMT]]></title><description><![CDATA[<p>Ja, du kannst als zusätzlichen Parameter myMap1.value_comp() an die Funktion übergeben - das ist das Prädikat, mit dem die Elemente innerhalb der Map verglichen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010443</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Mar 2006 11:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Tue, 14 Mar 2006 14:30:00 GMT]]></title><description><![CDATA[<p>Also, ich hab schon etwas damit rumprobiert und es funktioniert auch &quot;teilweise&quot;.<br />
Was nicht funktioniert ist folgendes.<br />
Ich habe zwei map&lt;double,string&gt; -Strukturen, die ich auf Gemeinsamkeiten (im string-Feld untersuchen will.</p>
<p>Der Code den ich dafür verwende ist:</p>
<pre><code class="language-cpp">set_intersection(myMap1.begin(),myMap1.end(),myMap2.begin(),myMap2.end(),inserter(myMap3,myMap3.end()),myMap1.key_comp());
</code></pre>
<p>mit diesem Code erhalte ich immer einen Fehler beim Compilieren.</p>
<p>Wenn ich stattdessen myMap1.value_comp() verwende, erhalte ich keinen Fehler beim Compilieren:</p>
<pre><code class="language-cpp">set_intersection(myMap1.begin(),myMap1.end(),myMap2.begin(),myMap2.end(),inserter(myMap3,myMap3.end()),myMap1.value_comp());
</code></pre>
<p>Aber damit erhalte ich natürlich nicht das gewünschte Ergebnis <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1016075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016075</guid><dc:creator><![CDATA[Laser]]></dc:creator><pubDate>Tue, 14 Mar 2006 14:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Wed, 15 Mar 2006 07:31:50 GMT]]></title><description><![CDATA[<p>Laser schrieb:</p>
<blockquote>
<p>mit diesem Code erhalte ich immer einen Fehler beim Compilieren.</p>
</blockquote>
<p>Welchen Fehler?</p>
<p>PS: map's sind nur bezüglich des Schlüssels sortiert (bei deinem Beispiel also das double-Feld), aber nicht bezüglich des zugeordneten Wertes - also kannst du set_intersection auch nicht auf den Wert-Teil der map anwenden (jedenfalls nicht direkt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016449</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Mar 2006 07:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Wed, 15 Mar 2006 18:59:28 GMT]]></title><description><![CDATA[<p>mein code sieht ungefähr so aus:</p>
<pre><code class="language-cpp">map&lt;double,string&gt; myMap1, myMap2; 
set&lt;string&gt; entries;

 //füllen von myMap1 &amp; myMap2 

set_intersection( myMap1.begin(), myMap1.end(), myMap2.begin(), myMap2.end(), 
         inserter( entries, entries.end() ),myMap1.key_comp() );
</code></pre>
<p>und die fehlermeldung so:</p>
<pre><code>g++ -O0 -g3 -Wall -c -fmessage-length=0 -oMainMenu.o ../MainMenu.cpp
/usr/include/c++/4.0.2/bits/stl_algo.h: In function ‘_OutputIterator std::set_intersection(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare) [with _InputIterator1 = std::_Rb_tree_iterator&lt;std::pair&lt;const double, std::string&gt; &gt;, _InputIterator2 = std::_Rb_tree_iterator&lt;std::pair&lt;const double, std::string&gt; &gt;, _OutputIterator = std::insert_iterator&lt;std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt; &gt;, _Compare = std::less&lt;double&gt;]’:
../MainMenu.cpp:367:   instantiated from here
/usr/include/c++/4.0.2/bits/stl_algo.h:4281: error: no match for call to ‘(std::less&lt;double&gt;) (std::pair&lt;const double, std::string&gt;&amp;, std::pair&lt;const double, std::string&gt;&amp;)’
/usr/include/c++/4.0.2/bits/stl_function.h:226: note: candidates are: bool std::less&lt;_Tp&gt;::operator()(const _Tp&amp;, const _Tp&amp;) const [with _Tp = double]
../MainMenu.cpp:367:   instantiated from here
/usr/include/c++/4.0.2/bits/stl_algo.h:4283: error: no match for call to ‘(std::less&lt;double&gt;) (std::pair&lt;const double, std::string&gt;&amp;, std::pair&lt;const double, std::string&gt;&amp;)’
/usr/include/c++/4.0.2/bits/stl_function.h:226: note: candidates are: bool std::less&lt;_Tp&gt;::operator()(const _Tp&amp;, const _Tp&amp;) const [with _Tp = double]
../MainMenu.cpp:367:   instantiated from here
/usr/include/c++/4.0.2/bits/stl_algo.h:4287: error: no match for ‘operator=’ in ‘__result. std::insert_iterator&lt;_Container&gt;::operator* [with _Container = std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt;]() = __first1. std::_Rb_tree_iterator&lt;_Tp&gt;::operator* [with _Tp = std::pair&lt;const double, std::string&gt;]()’
/usr/include/c++/4.0.2/bits/stl_iterator.h:531: note: candidates are: std::insert_iterator&lt;_Container&gt;&amp; std::insert_iterator&lt;_Container&gt;::operator=(typename _Container::const_reference) [with _Container = std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt;]
/usr/include/c++/4.0.2/bits/stl_iterator.h:491: note:                 std::insert_iterator&lt;std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt; &gt;&amp; std::insert_iterator&lt;std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt; &gt;::operator=(const std::insert_iterator&lt;std::set&lt;std::string, std::less&lt;std::string&gt;, std::allocator&lt;std::string&gt; &gt; &gt;&amp;)
</code></pre>
<p>Die Sache ist dass die Map schon nach den double-Werten sortiert sein soll weil die eine Art &quot;Bewertung&quot; darstellen, aber andererseits will ich gucken ob es &quot;Einträge/Strings&quot; gibt die in beiden Maps vorkommen (dürfen sich in den Bewertungen unterscheiden)</p>
<p>Könnte ja auch eine eigene set_intersection-Methode implementieren, bei der ich selber mit Iteratoren überprüfe wo die Elemente gleich sind, aber dachte dass es auch mit der STL-Methode gehen muss/sollte (die wohl effizienter ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017043</guid><dc:creator><![CDATA[Laser]]></dc:creator><pubDate>Wed, 15 Mar 2006 18:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to set_intersection &#x2F;difference bei maps&#x2F;sets on Thu, 16 Mar 2006 07:13:44 GMT]]></title><description><![CDATA[<p>Ups, stimmt - map::key_comp() erwartet Schlüsselwerte (in deinem Fall double's), die es vergleichen soll.</p>
<p>Und ja: set_intersection ist effizienter als ein linearer Vergleich, ABER es erwartet, daß der Suchbereich <strong>entsprechend dem gesuchten Kriterium</strong> sortiert ist (und eine map&lt;double,string&gt; ist NICHT nach den string's sortiert). Du könntest höchstens einen Umweg über einen zweiten Container verwenden:</p>
<pre><code class="language-cpp">template&lt;typename F,typename S&gt;
bool cmp2nd(const pair&lt;F,S&gt;&amp; lhs,const pair&lt;F,S&gt;&amp; rhs)
{ return lhs.second&lt;rhs.second; }

map&lt;double,string&gt; map1,map2;
multimap&lt;double,string&gt; target;

//umkopieren in Vectoren:
vector&lt;pair&lt;double,string&gt; data1(map1.begin(),map1.end()),data2(map2.begin(),map2.end());
//diese Vectoren kannst du jetzt nach deinen eigenen Vorstellungen sortieren und mergen:
sort(data1.begin(),data1.end(),cmp2nd);
sort(data2.begin(),data2.end(),cmp2nd);
set_intersection(data1.begin(),data1.end(),data2.begin(),data2.end(),inserter(target,target.begin()),cmp2nd);
</code></pre>
<p>(oder du nutzt transform(), um aus jeder map die string-Hälften rauszuziehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017244</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Mar 2006 07:13:44 GMT</pubDate></item></channel></rss>