C ++ Der effizienteste Weg, um eine Variable mit mehreren Werten zu vergleichen?

8

Einige Male in meinem Programm musste ich prüfen, ob eine Variable eine von vielen Optionen war. Zum Beispiel

%Vor%

Ich habe mich mit ORs herumgeschlagen, aber nichts scheint richtig zu sein. Ich habe es versucht

%Vor%

aber es tut nichts. Bitte helfen Sie! Vielen Dank im Voraus.

P.S. Ich muss zwischen mehreren Gruppen unterscheiden. Zum Beispiel ...

%Vor%     
Matthew Reynolds 03.03.2013, 01:48
quelle

6 Antworten

6

Wenn die Werte, die Sie überprüfen möchten, ausreichend klein sind, können Sie eine Bitmaske der gesuchten Werte erstellen und dann prüfen, ob dieses Bit gesetzt ist.

Angenommen, Sie interessieren sich für ein paar Gruppen.

%Vor%

Dieser Ansatz funktioniert am besten für Werte, die nicht die natürliche Größe überschreiten, mit der Ihre CPU gerne arbeitet. Dies wäre in der heutigen Zeit typischerweise 64, kann aber je nach den spezifischen Gegebenheiten Ihrer Umgebung variieren.

    
Eric Johnson 03.03.2013, 02:41
quelle
14

Hier ist ein Weg in C ++ 11, mit std :: initializer_list:

%Vor%

damit können Sie tun:

%Vor%

Beachten Sie jedoch, dass Dinge wie <1 nicht möglich sind.

    
Nikos C. 03.03.2013 02:56
quelle
4

Sie müssen den Vergleich mit jedem Wert durchführen. ZB

%Vor%

Sie sollten auch einen Schalter in Erwägung ziehen und Fälle absichtlich fallen lassen (obwohl ich nicht glaube, dass dies die beste Lösung für das ist, was Sie sagen).

%Vor%     
john.pavan 03.03.2013 01:52
quelle
3

Ich hatte gerade ein ähnliches Problem und kam zu diesen C ++ 11-Lösungen:

%Vor%

Oder als Alternative ohne die rekursiv beendende Methode. Beachten Sie, dass hier die Reihenfolge der Vergleiche nicht definiert ist und dass diese nicht vorzeitig beendet wird, wenn die erste Übereinstimmung gefunden wird. Aber der Code ist kompakter.

%Vor%

Für beide Lösungen würde der Code so aussehen:

%Vor%     
Felix Petriconi 24.01.2015 09:51
quelle
2

Sie können eine Menge von Ganzzahlen definieren, die gewünschten Werte hinzufügen und dann mithilfe der find-Methode feststellen, ob der betreffende Wert in der Menge

enthalten ist %Vor%     
dasblinkenlight 03.03.2013 01:58
quelle
0

Ich musste etwas Ähnliches für enums machen. Ich habe eine Variable und möchte sie gegen eine Reihe von Werten testen.

Hier habe ich eine variadic Template-Funktion verwendet. Beachten Sie die Spezialisierung für const char* type, sodass is_in( my_str, "a", "b", "c") das erwartete Ergebnis hat, wenn my_str speichert "a" .

%Vor%

Beispielverwendung:

%Vor%     
Darren Smith 10.02.2017 23:56
quelle