<?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[STL: binary_search Verständnisproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich setze mich gerade mit der STL auseinander und scheitere am binary_search.</p>
<p>Ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class data
{
        // nur wesentliche Bestandteile
    public:

        bool operator &lt;(const data compare) const;

    protected:

        std::string str;

};
</code></pre>
<p>In ein multiset füge ich nun Objekte der Klasse data mit insert ein.</p>
<pre><code class="language-cpp">values.insert(data(&quot;Test&quot;));
</code></pre>
<p>Soweit funktioniert das auch. Nun wollte ich auf mein multiset values binary_search anwenden:</p>
<pre><code class="language-cpp">std::binary_search( values.begin(), values.end(), &quot;Test&quot; )
</code></pre>
<p>Bekomme aber folgenden Fehler:</p>
<p>no match for 'operator&lt;' in '(&amp;__middle)-&gt;std::_Rb_tree_const_iterator&lt;_Tp&gt;::operator* [with _Tp = data]() &lt; __val'<br />
data.h:15: note: candidates are: bool data::operator&lt;(data) const</p>
<p>Liegt ja offensichtlich an meinem &lt; Operator. Aber ich habe bisher nicht rausfinden können was genau...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194324/stl-binary_search-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 10:24:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194324.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Oct 2007 09:49:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 09:50:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich setze mich gerade mit der STL auseinander und scheitere am binary_search.</p>
<p>Ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class data
{
        // nur wesentliche Bestandteile
    public:

        bool operator &lt;(const data compare) const;

    protected:

        std::string str;

};
</code></pre>
<p>In ein multiset füge ich nun Objekte der Klasse data mit insert ein.</p>
<pre><code class="language-cpp">values.insert(data(&quot;Test&quot;));
</code></pre>
<p>Soweit funktioniert das auch. Nun wollte ich auf mein multiset values binary_search anwenden:</p>
<pre><code class="language-cpp">std::binary_search( values.begin(), values.end(), &quot;Test&quot; )
</code></pre>
<p>Bekomme aber folgenden Fehler:</p>
<p>no match for 'operator&lt;' in '(&amp;__middle)-&gt;std::_Rb_tree_const_iterator&lt;_Tp&gt;::operator* [with _Tp = data]() &lt; __val'<br />
data.h:15: note: candidates are: bool data::operator&lt;(data) const</p>
<p>Liegt ja offensichtlich an meinem &lt; Operator. Aber ich habe bisher nicht rausfinden können was genau...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378439</guid><dc:creator><![CDATA[robert.S]]></dc:creator><pubDate>Fri, 05 Oct 2007 09:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 09:55:19 GMT]]></title><description><![CDATA[<p>Zeig doch mal die Konstruktoren der Data-Klasse. (btw, funktioniert es denn, wenn du binary_search(...,data(&quot;Test&quot;)) schreibst?)</p>
<p>PS: binary_search() auf den assiziativen Containern ist nicht unbedingt besonders schnell - da solltest du lieber die Methode find() verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378442</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 09:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 09:56:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(std::binary_search(values.begin(), values.end(), data(&quot;Test&quot;)))
// gefunden
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1378444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378444</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Fri, 05 Oct 2007 09:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 10:10:50 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(btw, funktioniert es denn, wenn du binary_search(...,data(&quot;Test&quot;)) schreibst?)</p>
</blockquote>
<p>Airdamn schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(std::binary_search(values.begin(), values.end(), data(&quot;Test&quot;)))
// gefunden
</code></pre>
</blockquote>
<p>Danke euch. Damit klappt es.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>PS: binary_search() auf den assiziativen Containern ist nicht unbedingt besonders schnell - da solltest du lieber die Methode find() verwenden.</p>
</blockquote>
<p>Echt? Ich dachte bei sortierten Daten ist eine Binärsuche besonders schnell. Arbeitet find nicht sequentiell?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378455</guid><dc:creator><![CDATA[robert.S]]></dc:creator><pubDate>Fri, 05 Oct 2007 10:10:50 GMT</pubDate></item><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 10:17:25 GMT]]></title><description><![CDATA[<p>Airdamn schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(std::binary_search(values.begin(), values.end(), data(&quot;Test&quot;)))
// gefunden
</code></pre>
</blockquote>
<p>Nutze lieber die Memberfunktion von multiset (std::binary_search ist zudem möglicherweise ineffizient):</p>
<pre><code class="language-cpp">if ( values.find( data(&quot;Test&quot;) ) != values.end() )
// ...
</code></pre>
<p>dein operator&lt; sollte als zweiten Parameter eine Referenz auf const Data haben.</p>
<p>binary_search ist nur bei schnell hinsichtlich der Anzahl der Vergleiche bei random access Iteratoren, da dies logarithmisch von der Anzahl der Elemente abhängt. Bei nicht-random-access-Iteratoren ist die Komplexität dagegen linear - natürlich könnte eine Implementation u.U. sehr schlau sein, und beim Aufuruf erkennen, dass die Iteratoren aus einem set stammen und die entsprechende Memberfunktion aufrufen - darauf verlassen sollte man sich allerdings nicht (zumal das voraussetzt, dass die Iteratoren wissen, zu welchem Container sie gehören).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378457</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 05 Oct 2007 10:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to STL: binary_search Verständnisproblem on Fri, 05 Oct 2007 10:28:11 GMT]]></title><description><![CDATA[<p>robert.S schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>PS: binary_search() auf den assiziativen Containern ist nicht unbedingt besonders schnell - da solltest du lieber die Methode find() verwenden.</p>
</blockquote>
<p>Echt? Ich dachte bei sortierten Daten ist eine Binärsuche besonders schnell. Arbeitet find nicht sequentiell?</p>
</blockquote>
<p>Binäre Suche ist - bezogen auf die Anzahl Vergleiche - auch recht schnell. Allerdings springt sie über große Distanzen durch den durchsuchten Bereich und benötigt deshalb Random-Access-Iteratoren, um diese Geschwindigkeit ausschöpfen zu können. Bei bidirektionalen Iteratoren mußt du per advance() die jeweils richtige Position anlaufen - und das bremst das gesamte Verfahren aus.<br />
(set::find() kann sich dagegen durch die interne Baumstruktur durchhangeln)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378473</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 10:28:11 GMT</pubDate></item></channel></rss>