<?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[Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine recht große Liste von nicht überlappenden Intervallen, z.B.<br />
[0, 12), [14, 15), [20, 400), [404, 405) ...</p>
<p>Nun möchte ich effizient feststellen, ob ein Wert in einem dieser Intervalle liegt.<br />
Da es sehr viele sind, wäre es nicht so gut, jedes Intervall durchzugehen und dann zu testen.<br />
Die maximalen Werte, die von den Intervallen beschrieben werden, sind aber auch relativ groß, so dass eine einfache Tabelle (die für jede Zahl beinhaltet, ob sie drin liegt oder nicht) auch nicht in Frage kommt.</p>
<p>Am besten wäre da wohl ein binärer Baum, oder?</p>
<p>Gibt es in der C++-Standardbibliothek/STL etwas, womit ich das realisieren könnte, oder muss ich das selbst schreiben?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192934/schnell-feststellen-ob-wert-innerhalb-eines-von-vielen-intervallen-liegt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 16:11:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192934.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Sep 2007 09:33:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt on Thu, 20 Sep 2007 09:33:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine recht große Liste von nicht überlappenden Intervallen, z.B.<br />
[0, 12), [14, 15), [20, 400), [404, 405) ...</p>
<p>Nun möchte ich effizient feststellen, ob ein Wert in einem dieser Intervalle liegt.<br />
Da es sehr viele sind, wäre es nicht so gut, jedes Intervall durchzugehen und dann zu testen.<br />
Die maximalen Werte, die von den Intervallen beschrieben werden, sind aber auch relativ groß, so dass eine einfache Tabelle (die für jede Zahl beinhaltet, ob sie drin liegt oder nicht) auch nicht in Frage kommt.</p>
<p>Am besten wäre da wohl ein binärer Baum, oder?</p>
<p>Gibt es in der C++-Standardbibliothek/STL etwas, womit ich das realisieren könnte, oder muss ich das selbst schreiben?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369046</guid><dc:creator><![CDATA[Absynth]]></dc:creator><pubDate>Thu, 20 Sep 2007 09:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt on Thu, 20 Sep 2007 09:36:19 GMT]]></title><description><![CDATA[<p>std::map ist wie n binärbaum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369048</guid><dc:creator><![CDATA[dfgs]]></dc:creator><pubDate>Thu, 20 Sep 2007 09:36:19 GMT</pubDate></item><item><title><![CDATA[Reply to Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt on Thu, 20 Sep 2007 09:37:45 GMT]]></title><description><![CDATA[<p>Intervalle sortieren und dann immer Mitte prüfen-&gt;(Links/Rechts davon), bis nur eins übrigbleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369050</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 20 Sep 2007 09:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt on Thu, 20 Sep 2007 09:43:04 GMT]]></title><description><![CDATA[<p>binäre Suche dürfte schon der richtige Ansatz sein - ich würde die einzelnen Teilintervalle als int-Paar speichern und dann per lower_bound() das nächstkleinere Intervall zu einem Suchwert bestimmen:</p>
<pre><code class="language-cpp">typedef pair&lt;int,int&gt; intervall;
vector&lt;intervall&gt; data;//mit Werten füllen

intervall dummy = make_pair(target,target);
/* lower_bound() findet das nächste Element, was kleiner/gleich dem Suchwert ist, also liegt
   der Suchwert schonmal zwischen pos-&gt;first und (pos+1)-&gt;first
*/
vector&lt;intervall&gt;::iterator pos=lower_bound(data.begin(),data.end(),dummy);
return pos-&gt;second&gt;target;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1369054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369054</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Sep 2007 09:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schnell feststellen, ob Wert innerhalb eines von vielen Intervallen liegt on Thu, 20 Sep 2007 11:52:26 GMT]]></title><description><![CDATA[<p>Vielen Dank.</p>
<p>Mit dem lower_bound funktioniert es prima. <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/1369211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369211</guid><dc:creator><![CDATA[Absynth]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:52:26 GMT</pubDate></item></channel></rss>