<?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[enums vergleichen]]></title><description><![CDATA[<p>Hi,</p>
<p>darf ich enums vergleichen? Falls nein, darf ich das, wenn ich explizit Werte zuweise:</p>
<pre><code class="language-cpp">enum
{
    APFEL = 1,
    BIRNE = 2
};

bool x = APFEL &lt; BIRNE;
</code></pre>
<p>?</p>
<p>Dritte Frage: Falls ich das auch nicht darf, wie löst ihr das dann? Ein set erscheint mir dann eigentlich recht sinnvoll, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288813/enums-vergleichen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 14:20:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288813.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Jun 2011 13:13:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:14:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>darf ich enums vergleichen? Falls nein, darf ich das, wenn ich explizit Werte zuweise:</p>
<pre><code class="language-cpp">enum
{
    APFEL = 1,
    BIRNE = 2
};

bool x = APFEL &lt; BIRNE;
</code></pre>
<p>?</p>
<p>Dritte Frage: Falls ich das auch nicht darf, wie löst ihr das dann? Ein set erscheint mir dann eigentlich recht sinnvoll, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082616</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:17:40 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>darf ich enums vergleichen?</p>
</blockquote>
<p>Falls du Objekte von <code>enum</code> s meinst: Ja.</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Dritte Frage: Falls ich das auch nicht darf, wie löst ihr das dann? Ein set erscheint mir dann eigentlich recht sinnvoll, oder?</p>
</blockquote>
<p>Falls du <code>enum</code> -Objekte nicht vergleichen dürftest, könnte das ein <code>std::set</code> auch nicht <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>Wobei, bei Zeigern ist es ja genau so. <code>operator&lt;</code> ist für irgendwelche zwei Zeiger verboten, aber <code>std::less</code> ist erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082618</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:27:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">enum test1{
	test11 = 1,
	test12 = 2
};
enum test2{
	test21 = 1,
	test22 = 2
};
</code></pre>
<pre><code class="language-cpp">if(test1::test11 == test2::test21)
		std::cout &lt;&lt; &quot;yes&quot;;
	else
		std::cout &lt;&lt; &quot;no&quot;;
	if(test1::test11 == test2::test22)
		std::cout &lt;&lt; &quot;yes&quot;;
	else
		std::cout &lt;&lt; &quot;no&quot;;
        if(test1::test11 == test2::test21)
		std::cout &lt;&lt; &quot;yes&quot;;
	else
		std::cout &lt;&lt; &quot;no&quot;;
</code></pre>
<p>Ergebnis:</p>
<pre><code>yes
yes
no
</code></pre>
<p>Von daher, ja es geht <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/2082628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082628</guid><dc:creator><![CDATA[Joscha__]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:43:28 GMT]]></title><description><![CDATA[<p>Joscha__ schrieb:</p>
<blockquote>
<p>Von daher, ja es geht <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 beweist gar nichts! Der Compiler (den du nicht mal angegeben hast) könnte auch Fehlerhaft sein. Und statt dem ganzen <code>&quot;yes&quot;</code> und so hätte man die bool'schen Resultate ausgegeben und davor das Flag <code>std::boolalpha</code> gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082634</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:51:51 GMT]]></title><description><![CDATA[<p>Dass man zwei unterschiedliche enums vergleichen kann, ist aber nicht sehr typsicher, das würde ich unterlassen.</p>
<p>Achso und mit Vergleichen meine ich jetzt den operator&lt;.</p>
<p>Konkret:<br />
Ich habe Karten (Spielkarten wie in Poker, Skat etc.) und möchte jetzt gerne einen String von &quot;Ks&quot; umwandeln. K entspricht dabei KING (einem enum-Wert) und &quot;s&quot; der suit, also s wäre hier spade.</p>
<p>Jetzt will ich zwei enum-Objekte vergleichen, also:</p>
<pre><code class="language-cpp">enum Value
{
    ACE,
    KING,
    //...
};

Value x = ACE, y = KING;
bool comp = x &lt; y;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2082639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082639</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 13:54:08 GMT]]></title><description><![CDATA[<p>Das hätte ich jetzt mit einer <code>std::map</code> gemacht, dann hast du den Namen der Karte (den du sicher irgendwann brauchst) auch dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082642</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 23 Jun 2011 13:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 14:47:13 GMT]]></title><description><![CDATA[<p>Okay, aber der Vergleich ist bei einer Map ja noch nicht direkt dabei oder würdest Du vergleichbare Objekte machen? Ich kombiniere nämlich gerade enum mit nem char.</p>
<pre><code class="language-cpp">charValueMap.insert(CharValueMapType('2', TWO));
				charValueMap.insert(CharValueMapType('3', THREE));
				charValueMap.insert(CharValueMapType('4', FOUR));
				charValueMap.insert(CharValueMapType('5', FIVE));
				charValueMap.insert(CharValueMapType('6', SIX));
				charValueMap.insert(CharValueMapType('7', SEVEN));
				charValueMap.insert(CharValueMapType('8', EIGHT));
				charValueMap.insert(CharValueMapType('9', NINE));
				charValueMap.insert(CharValueMapType('T', TEN));
				charValueMap.insert(CharValueMapType('t', TEN));
				charValueMap.insert(CharValueMapType('J', JACK));
				charValueMap.insert(CharValueMapType('j', JACK));
				charValueMap.insert(CharValueMapType('Q', QUEEN));
				charValueMap.insert(CharValueMapType('q', QUEEN));
				charValueMap.insert(CharValueMapType('K', KING));
				charValueMap.insert(CharValueMapType('k', KING));
				charValueMap.insert(CharValueMapType('A', ACE));
				charValueMap.insert(CharValueMapType('a', ACE));
</code></pre>
<p>Denn A ist ja als char kleiner als K, was mir nicht passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082670</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 23 Jun 2011 14:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 14:55:22 GMT]]></title><description><![CDATA[<p>Brauchst du wirklich eine <code>std::map</code> oder eher ein <code>std::set</code> mit <code>std::pair&lt;value, char&gt;</code> ?</p>
<p>Du könntest jedenfalls einen eigenen Vergleichsfunktor angeben. Wobei das bei <code>std::pair</code> gar nicht nötig ist, dann wird einfach nach dem ersten ( <code>first</code> ) und bei Gleichheit nach dem zweiten ( <code>second</code> ) Member verglichen. Wenn der <code>first</code> -Member gerade dem Kartenwert entspricht und die Enumeratoren nach Wert sortiert sind, sollte das gerade dem gewünschten Verhalten entsprechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082677</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 23 Jun 2011 14:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Thu, 23 Jun 2011 15:20:53 GMT]]></title><description><![CDATA[<p>Den Vergleichsoperator zu benutzen fände ich okay, jedoch ist meiner Meinung nach ein Vergleich à la &quot;Apfel ist kleiner als Birne&quot; ein wenig komisch <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="😃"
    /><br />
Aber wie es aussieht willst du das bei einem Kartenspiel benutzen, da ginge es noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082688</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Thu, 23 Jun 2011 15:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Fri, 24 Jun 2011 11:08:55 GMT]]></title><description><![CDATA[<p>Hm, ich bin jetzt sogar auf eine bimap umgestiegen, weil ich anhand des Zeichens das enum-Objekt (für die Eingabe), aber auch umgekehrt (für die Ausgabe) haben möchte. Bei einem set wäre die Suche nicht für beide Richtungen optimiert, oder? Wenn ich nach second suchen würde, müsste ich ja linear durchgehen. Andererseits habe ich für die chars ja keine wirkliche Sortierung, sodass das sowieso linear ist, hm...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083120</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 24 Jun 2011 11:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Fri, 24 Jun 2011 11:24:12 GMT]]></title><description><![CDATA[<p>Für so wenige mögliche Werte könntest du locker in beiden Richtungen eine lineare Suche haben. Die logarithmische Laufzeitkomplexität zahlt sich vor allem bei grossen Containern aus.</p>
<p>Von daher: Nimm die Lösung, die für dich am einfachsten und komfortabelsten ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083133</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Jun 2011 11:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Fri, 24 Jun 2011 12:14:27 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, ich bin jetzt sogar auf eine bimap umgestiegen,</p>
</blockquote>
<p>Während der Rechnungen willst Du keine bimap, der op&lt; muß performant sein, also einfach den enum in der Reihenfolge anlegen, die der op&lt; vorgibt.<br />
Für die Ausgabe reicht es, den enum als Arrayindex zu nehmen. Vielleicht sogar für die GUI-Eingabe. Für die Konsolen- und Datei-Eingabe kannste irgendwas nehmen, std::strchr, std::string::find, std::find auf diversen Containern oder rohem Array oder String-Literal, std::map, std::hash_map, perfect hashing, auch ein 256 großen Array um von char zurückzukommen. Aber egal, die Eingabe dauert so unglaublich viele Millionen mal länger als so ein Nachkuckerchen, daß man da irgend eine naheliegende Lösung sucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083164</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Jun 2011 12:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to enums vergleichen on Fri, 24 Jun 2011 21:58:41 GMT]]></title><description><![CDATA[<p>Ok, bimap war irgendwie übertrieben. Aber ich merke gerade, dass der Flaschenhals bei mir sowieso wo anders liegt.</p>
<p>Ich arbeite ja jetzt an einem Equity-Berechner, d.h. ich habe zwei Pokerblätter (5 Karten) und vergleiche diese. Wenn ich jetzt wie in Texas Hold'em aber nur die zwei Holecards habe, kommen noch fünf weitere Karten in die Mitte. Jetzt muss ich also 48*47*46*45*44 Kombinationen durchgehen und für jede prüfen, welche Hand besser ist. Mehr noch: Für jede dieser Kombinationen kann ich ja jeweils eine Holecard, zwei oder keine nutzen, d.h. ich muss 3x3 = 9 Kombinationen vergleichen.</p>
<p>Das sind aber über eine Billion und meine Abfrage ist nicht wirklich performant genug, um das abzudecken. Wie kriege ich das denn schnell hin, gibt es da wohl irgend einen Trick?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083612</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 24 Jun 2011 21:58:41 GMT</pubDate></item></channel></rss>