<?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[Suche BinarySearch Algo mit RUeckgabewert: Position]]></title><description><![CDATA[<p>MahlZeit!</p>
<p>Bin auf der SUche nach einem Binary Search Algorithmus, der die Position in einem sortierten vector&lt;long&gt; zurueckgibt ( falls etwas gefunden wird ) oder 0.<br />
Der bis dato von mir gefundene binary_search(...) Algorithmus, gibt nur true/false zurueck, was mir nichts bringt. Habe bis dato lower_bound() benutzt, aber gemerkt, dass bei mehreren gleichen Werten nicht die selbe Position zurueckgegeben wird, als bei vergleichbarer Binaerer Suche ...</p>
<p>#50</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140353/suche-binarysearch-algo-mit-rueckgabewert-position</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/140353.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Mar 2006 11:52:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 11:52:37 GMT]]></title><description><![CDATA[<p>MahlZeit!</p>
<p>Bin auf der SUche nach einem Binary Search Algorithmus, der die Position in einem sortierten vector&lt;long&gt; zurueckgibt ( falls etwas gefunden wird ) oder 0.<br />
Der bis dato von mir gefundene binary_search(...) Algorithmus, gibt nur true/false zurueck, was mir nichts bringt. Habe bis dato lower_bound() benutzt, aber gemerkt, dass bei mehreren gleichen Werten nicht die selbe Position zurueckgegeben wird, als bei vergleichbarer Binaerer Suche ...</p>
<p>#50</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1015952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1015952</guid><dc:creator><![CDATA[Raute50]]></dc:creator><pubDate>Tue, 14 Mar 2006 11:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 12:03:39 GMT]]></title><description><![CDATA[<p>Raute50 schrieb:</p>
<blockquote>
<p>MahlZeit!</p>
<p>Bin auf der SUche nach einem Binary Search Algorithmus, der die Position in einem sortierten vector&lt;long&gt; zurueckgibt ( falls etwas gefunden wird ) oder 0.<br />
Der bis dato von mir gefundene binary_search(...) Algorithmus, gibt nur true/false zurueck, was mir nichts bringt. Habe bis dato lower_bound() benutzt, aber gemerkt, <strong>dass bei mehreren gleichen Werten nicht die selbe Position zurueckgegeben wird, als bei vergleichbarer Binaerer Suche ...</strong></p>
<p>#50</p>
</blockquote>
<p>was erwartest du? sofern zum vergleichswert äquvalente elemente im vektor existieren, wird lower_bound immer auf das erste und upper_bound immer auf das letzte+1 dieser äquivalenten elemente zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1015967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1015967</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 14 Mar 2006 12:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 13:20:30 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Raute50 schrieb:</p>
<blockquote>
<p>MahlZeit!</p>
<p>Bin auf der SUche nach einem Binary Search Algorithmus, der die Position in einem sortierten vector&lt;long&gt; zurueckgibt ( falls etwas gefunden wird ) oder 0.<br />
Der bis dato von mir gefundene binary_search(...) Algorithmus, gibt nur true/false zurueck, was mir nichts bringt. Habe bis dato lower_bound() benutzt, aber gemerkt, <strong>dass bei mehreren gleichen Werten nicht die selbe Position zurueckgegeben wird, als bei vergleichbarer Binaerer Suche ...</strong></p>
<p>#50</p>
</blockquote>
<p>was erwartest du? sofern zum vergleichswert äquvalente elemente im vektor existieren, wird lower_bound immer auf das erste und upper_bound immer auf das letzte+1 dieser äquivalenten elemente zeigen.</p>
</blockquote>
<p>Das haben wir dann auch schon herausgefunden! Urspruenglich sollten in dem vector auch keine Eintraege doppelt sein ... aber leider tritt das nun doch auf ...</p>
<p>Deine Aussage hilft mir aber leider <strong>ueberhaupt nicht</strong> weiter, denn ich suche immer noch nach einer Variante von binary search, die die Postion zurueck gibt.</p>
<p>Existiert denn soetwas schon ueberhaupt oder muss ich mir das selber schreiben ?!</p>
<p>GreetZ!</p>
<p>#50</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016039</guid><dc:creator><![CDATA[Raute50]]></dc:creator><pubDate>Tue, 14 Mar 2006 13:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 13:22:46 GMT]]></title><description><![CDATA[<p>lower_bound() gibt doch die Position zurück, wäre also das richtige für dich.</p>
<p>(eventuell ist der vector auch der falsche Container für dich - schonmal über (multi)set nachgedacht?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016041</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 14 Mar 2006 13:22:46 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 13:23:33 GMT]]></title><description><![CDATA[<p>Huh? Du kannst Dir damit doch das erste und das letzte holen. Und zwar nen iterator dadrauf. Mit dem iterator kannste auch die Position bestimmen.<br />
Wenn es doppelte Einträge gibt, dann ist &quot;die Position&quot; übrigens nicht sehr eindeutig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016043</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 14 Mar 2006 13:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 13:31:50 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Huh? Du kannst Dir damit doch das erste und das letzte holen. Und zwar nen iterator dadrauf. Mit dem iterator kannste auch die Position bestimmen.<br />
Wenn es doppelte Einträge gibt, dann ist <strong>&quot;die Position&quot;</strong> übrigens nicht sehr eindeutig.</p>
</blockquote>
<p>Das stimmt ... sorry dafuer .... !</p>
<p>Gute Idee mit den beiden _bound FUnktionen ! Werde es gleich mal vorschlagen ... ( sitze gerade mit mehreren an einem C++ Projekt ).</p>
<p><em>DIE POSITION</em> ziehlt unseres Erachtens auf die Position ab, die durch binary search entdeckt wird. Es gibt eine vergleichbare Funktion die wir adaptieren sollen, die binary_search() heisst und eine Postition zurueck gibt ...</p>
<p>Sieht wohl so aus, als muessten wir selber Hand anlgegen ...</p>
<p>GreetZ!</p>
<p>#50</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016050</guid><dc:creator><![CDATA[Raute50]]></dc:creator><pubDate>Tue, 14 Mar 2006 13:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Suche BinarySearch Algo mit RUeckgabewert: Position on Tue, 14 Mar 2006 20:41:37 GMT]]></title><description><![CDATA[<p>Es gibt 4 Algorithmen in der STL, die eine binäre Suche durchführen. Das sind<br />
lower_bound, upper_bound, equal_range und binary_search<br />
Nach Deiner Beschreibung kannst Du Dein Problem sowohl mit 'lower_bound' als auch mit 'equal_range' lösen.<br />
Es kommt lediglich darauf an, wie man das jeweilige Ergebnis interpretiert.</p>
<p>Anbei ein Beispiel, welches die Anwendung zeigt:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iterator&gt;     // std::distance
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

void searchPos1( int x, const std::vector&lt; int &gt;&amp; v )
{
    vector&lt; int &gt;::const_iterator i = lower_bound( v.begin(), v.end(), x );
    if( i != v.end() &amp;&amp; *i == x )
    {
        cout &lt;&lt; x &lt;&lt; &quot; an Position &quot; &lt;&lt; distance( v.begin(), i ) &lt;&lt; &quot; gefunden&quot; &lt;&lt; endl;
    }
    else
    {
        cout &lt;&lt; x &lt;&lt; &quot; nicht gefunden&quot; &lt;&lt; endl;
    }
}

void searchPos2( int x, const std::vector&lt; int &gt;&amp; v )
{
    pair&lt; vector&lt; int &gt;::const_iterator, vector&lt; int &gt;::const_iterator &gt; ret 
        = equal_range( v.begin(), v.end(), x );
    if( distance( ret.first, ret.second ) &gt; 0 )
    {
        cout &lt;&lt; x &lt;&lt; &quot; an Position &quot; &lt;&lt; distance( v.begin(), ret.first ) &lt;&lt; &quot; gefunden&quot; &lt;&lt; endl;
    }
    else
    {
        cout &lt;&lt; x &lt;&lt; &quot; nicht gefunden&quot; &lt;&lt; endl;
    }
}

int main()
{
    const int arr[] = { -4, 0, 7, 13, 89, 123, 123, 124, 300 };
    vector&lt; int &gt; v( arr, arr + sizeof(arr)/sizeof(*arr) );

    searchPos1( 123, v );  // mit lower_bound
    searchPos2( 123, v );  // mit equal_range
    searchPos1( 125, v );
    searchPos2( 125, v );
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
<p>Edit: #include &lt;iterator&gt; vergessen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1016333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1016333</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 14 Mar 2006 20:41:37 GMT</pubDate></item></channel></rss>