<?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[Auf Wert prüfen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in meinem Programm einen Wert darauf prüfen, ob er in einer Liste von vordefinierten Werten vorhanden ist, d.h ich z.B. ein Array welches konstante Werte enthält, und nun soll geprüft werden, ob ein z.B. errechneter oder eingebener Wert in diesem Array vorhanden ist. Wie mache ich das bzw. gibt es eine elegantere Lösung, als das Array Element für Element zu durchlaufen? Gibt es eventuell bessere Datenstrukturen um das zu realisieren, oder ist dort ein Array schon das Komfortabelste?</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152447/auf-wert-prüfen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 00:48:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152447.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Jul 2006 11:50:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 11:50:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in meinem Programm einen Wert darauf prüfen, ob er in einer Liste von vordefinierten Werten vorhanden ist, d.h ich z.B. ein Array welches konstante Werte enthält, und nun soll geprüft werden, ob ein z.B. errechneter oder eingebener Wert in diesem Array vorhanden ist. Wie mache ich das bzw. gibt es eine elegantere Lösung, als das Array Element für Element zu durchlaufen? Gibt es eventuell bessere Datenstrukturen um das zu realisieren, oder ist dort ein Array schon das Komfortabelste?</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092432</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Thu, 06 Jul 2006 11:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 12:05:49 GMT]]></title><description><![CDATA[<p>Ich denke es kommt darauf an, wie diese Werte im Array stehen... Sollten sie zufällig drin stehen, wird es wohl keine bessere Lösung geben, als das Array zu durchlaufen.<br />
Sollten sie aber sortiert drin stehen, könnte man zB binäre Suche verwenden.<br />
Falls die Werte nicht sortiert sind und du öfters überprüfst, ob ein Wert vorkommt, lohnt es sich vielleicht auch, das Array zu sorieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092438</guid><dc:creator><![CDATA[Dommel]]></dc:creator><pubDate>Thu, 06 Jul 2006 12:05:49 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 12:06:44 GMT]]></title><description><![CDATA[<p>du kannst auch einen vector aus der stl und seine methoden verwenden!</p>
<p>Ansonsten dürfte dich bei relativ kleinen arrays das durchiterieren kein problem sein<br />
Dennoch meine empfehlung: vector, da er auch sicherer ist als von hand angelegte arrays!</p>
<p>Achja, und das Array vorher sortieren wäre viell noch sinnvoll!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092439</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Thu, 06 Jul 2006 12:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 12:10:22 GMT]]></title><description><![CDATA[<p>Ich würde dafür ehrlichgesagt ein std::set nehmen, da es zum einen dafür sorgt dass jede Zahl nur einmal vorhanden ist, und zum anderen den Lookup in O(log n) statt O(n) schafft, wie es beim Vector (oder C-Array) der Fall wäre.</p>
<p>EDIT: Und zum dritten eine native find-Methode bietet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092442</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Jul 2006 12:10:22 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 12:25:34 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ich würde dafür ehrlichgesagt ein std::set nehmen, da es zum einen dafür sorgt dass jede Zahl nur einmal vorhanden ist, und zum anderen den Lookup in O(log n) statt O(n) schafft, wie es beim Vector (oder C-Array) der Fall wäre.</p>
<p>EDIT: Und zum dritten eine native find-Methode bietet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>die beste empfehlung hängt von verschiedenen faktoren, die z.T. noch nicht genannt wurden, ab. ein std::set hat keine vorteile gegenüber einem sortierten vector, wenn dessen daten nur einmalig initialisiert (oder ggf. selten modifiziert werden). im gegenteil, finden sehr viele suchoperationen (im vergleich zu modifikationen) statt, so gibt es zwei probleme:<br />
für kleine objekte T ist der overhead der sets - 2 pointer je element + padding + allocatorverwaltung (wenn der allocator nichts taugt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> - erheblich<br />
es wird eine menge platz verschwendet (wenn ich ints speichere, brauche ich also auf 32bit systemen mindestens 3mal soviel platz wie ein vector mit minimal allockiertem speicher - d.h. selbst wenn der vector beim reallokieren verdoppelt, bleibt er immer noch sparsamer)<br />
dieser größere speicherverbrauch erhöht nat. das problem von cache misses, und bedingt auch eine relativ schlechte lokalität von referenzen.<br />
ist nun T ein sehr großes objekt, so relativiert sich der mehrverbrauch eines sets, zudem wird das kopieren ja proportional teuerer<br />
zudem spielt die gesamtgröße des containers eine rolle - für sehr kleine container kann eine lineare suche durchaus performanter als eine binäre suche sein</p>
<p>prinzipiell kann also ein vektor oder ein array durchaus die günstiste lösung sein. sofern möglich, dürfte ein statisches array dabei die nase vorn haben.</p>
<p>faustregel: std::set ist besser als sortierte vektoren - wenn<br />
- T sehr groß und teuer zu kopieren ist, oder<br />
- der container oft modifiziert werden muss</p>
<p>dass set eine eigene find-methode hat, bedeutet keinerlei vor- oder nachteil (eigentlich ist es eher ein nachteil, weil so die trennung zwischen algorithmus und datenstruktur aufgegeben wird)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092449</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 06 Jul 2006 12:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 13:54:36 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>eigentlich ist es eher ein nachteil, weil so die trennung zwischen algorithmus und datenstruktur aufgegeben wird)</p>
</blockquote>
<pre><code>Complexity:

std::binary_search : at most log(last - first) + 2 comparisons
std::equal_range : at most 2 * log(last - first) + 1 comparisons
std::upper_bound : at most log(last - first) + 1 comparisons
std::lower_bound : at most log(last - first) + 1 comparisons

ac = associative container
std::ac::find : logarithmic
std::ac::equal_range : logarithmic
std::ac::upper_bound : logarithmic
std::ac::lower_bound : logarithmic
</code></pre>
<p>Fragen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092522</guid><dc:creator><![CDATA[ssm]]></dc:creator><pubDate>Thu, 06 Jul 2006 13:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 13:59:49 GMT]]></title><description><![CDATA[<p>&quot;At most&quot; bedeutet aber doch nicht &quot;always&quot;. Ich gehe doch einfach mal davon aus dass die Standardalgorithmen für assoziative Container hinreichend effizient spezialisiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092528</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Jul 2006 13:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 14:12:20 GMT]]></title><description><![CDATA[<p>Da die Werte statisch sind und es eh nur 3 Werte sind, wird das Array wohl überflüssig sein und es reicht eine einfache if-Prüfung aus.</p>
<p>Ich danke euch für eure Hilfe.</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092539</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Thu, 06 Jul 2006 14:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 14:16:31 GMT]]></title><description><![CDATA[<p>Und für drei Zahlen treiben wir hier so'n Aufwand? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092543</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Jul 2006 14:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 14:53:09 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>&quot;At most&quot; bedeutet aber doch nicht &quot;always&quot;. Ich gehe doch einfach mal davon aus dass die Standardalgorithmen für assoziative Container hinreichend effizient spezialisiert sind.</p>
</blockquote>
<p>Leider ist es einhach unmöglich, die Standardalgorithmen so effizient zu spezialisieren. Scott Meyers hat darauf hingewiesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Chuqa schrieb:</p>
<blockquote>
<p>nur 3 Werte</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092567</guid><dc:creator><![CDATA[ssm]]></dc:creator><pubDate>Thu, 06 Jul 2006 14:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Wert prüfen on Thu, 06 Jul 2006 15:36:52 GMT]]></title><description><![CDATA[<p>ssm schrieb:</p>
<blockquote>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>&quot;At most&quot; bedeutet aber doch nicht &quot;always&quot;. Ich gehe doch einfach mal davon aus dass die Standardalgorithmen für assoziative Container hinreichend effizient spezialisiert sind.</p>
</blockquote>
<p>Leider ist es einhach unmöglich, die Standardalgorithmen so effizient zu spezialisieren. Scott Meyers hat darauf hingewiesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>das scheitert schon daran, dass die assoziativen container alle nur bi-direktionale iteratoren haben, und diese standard-algorithmen folglich gar nicht anwendbar sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092608</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 06 Jul 2006 15:36:52 GMT</pubDate></item></channel></rss>