Efficient ways to compare a variable with multiple values

16 Jul, 2021
In this article, we will discuss the ways to compare a variable with values.
Method 1: The idea is to compare each variable individually to all the multiple values at a time.
Program 1:
C++
Java
Python3
C#
Javascript
// C++ program to compare one variable// with multiple variable#include <iostream>using namespace std; // Driver Codeint main(){    // Variable to be compared    char character = 'a';     // Compare the given variable    // with vowel using || operator     // Check for vowel    if  (character == ('a' || 'e'            || 'i' || 'o'                    || 'u')) {        cout << "Vowel";    }     // Otherwise Consonant    else {        cout << "Consonant";    }     return 0;}
// Java program to compare one variable// with multiple variableimport java.util.*; class GFG{ // Driver Codepublic static void main(String[] args){    // Variable to be compared    char character = 'a';     // Compare the given variable    // with vowel using || operator    // Check for vowel    if (character == ('a' || 'e'            || 'i' || 'o'                    || 'u')) {        System.out.print("Vowel");    }     // Otherwise Consonant    else {        System.out.print("Consonant");    } }} // This code is contributed by Rajput-Ji
# Python program to compare one variable# with multiple variable # Driver Codeif __name__ == '__main__':       # Variable to be compared    character = 'a';     # Compare the given variable    # with vowel using or operator    # Check for vowel    if (character == ('a' or 'e' or 'i' or 'o' or 'u')):        print("Vowel");     # Otherwise Consonant    else:        print("Consonant"); # This code contributed by shikhasingrajput
// C# program to compare one variable// with multiple variableusing System; class GFG{ // Driver Codepublic static void Main(String[] args){    // Variable to be compared    char character = 'a';     // Compare the given variable    // with vowel using || operator    // Check for vowel    if (character == ('a' || 'e'            || 'i' || 'o'                    || 'u')) {        Console.Write("Vowel");    }     // Otherwise Consonant    else {        Console.Write("Consonant");    }}} // This code is contributed by 29AjayKumar
<script> // Javascript program to compare one variable// with multiple variable // Variable to be comparedvar character = 'a'; // Compare the given variable// with vowel using || operator // Check for vowelif  (character == ('a'. charCodeAt(0) ||                   'e'. charCodeAt(0) ||                   'i'. charCodeAt(0) ||                   'o'. charCodeAt(0) ||                   'u'. charCodeAt(0))){    document.write("Vowel");} // Otherwise Consonantelse{    document.write("Consonant");} // This code is contributed by SoumikMondal </script>
Consonant
Explanation:The above code gives the Wrong Answer or error as comparing variable in the above way is incorrect and it forced to code in the below way:
C++
Java
Python3
C#
Javascript
// C++ program to compare one variable// with multiple variable#include <iostream>using namespace std; // Driver Codeint main(){    // Variable to be compared    char character = 'a';     // Compare the given variable    // with vowel individually     // Check for vowel    if (character == 'a'        || character == 'e'        || character == 'i'        || character == 'o'        || character == 'u') {        cout << "Vowel";    }     // Otherwise Consonant    else {        cout << "Consonant";    }     return 0;}
// Java program to compare// one variable with multiple// variableimport java.util.*;class GFG{ // Driver Codepublic static void main(String[] args){  // Variable to be compared  char character = 'a';   // Compare the given variable  // with vowel using || operator   // Check for vowel  if (character == 'a' || character == 'e' ||      character == 'i' || character == 'o' ||      character == 'u')  {    System.out.print("Vowel");  }   // Otherwise Consonant  else  {    System.out.print("Consonant");  }}} // This code is contributed by 29AjayKumar
# Python3 program to compare# one variable with multiple# variable # Driver Codeif __name__ == '__main__':       # Variable to be compared    character = 'a';     # Compare the given variable    # with vowel using or operator     # Check for vowel    if (character == 'a' or        character == 'e' or        character == 'i' or        character == 'o' or        character == 'u'):        print("Vowel");     # Otherwise Consonant    else:        print("Consonant"); # This code contributed by Princi Singh
// C# program to compare// one variable with multiple// variableusing System;class GFG{ // Driver Codepublic static void Main(String[] args){  // Variable to be compared  char character = 'a';   // Compare the given variable  // with vowel using || operator   // Check for vowel  if (character == 'a' || character == 'e' ||      character == 'i' || character == 'o' ||      character == 'u')  {    Console.Write("Vowel");  }   // Otherwise Consonant  else  {    Console.Write("Consonant");  }}} // This code is contributed by gauravrajput1
<script> // javascript program to compare one variable// with multiple variable   // Driver Code function checkCharacter(character){      // Compare the given variable    // with vowel using || operator    // Check for vowel     if (character == 'a' || character == 'e' ||      character == 'i' || character == 'o' ||      character == 'u')   {      document.write("Vowel");    }      // Otherwise Consonant    else {        document.write("Consonant");    }} // Driver Code checkCharacter('a'); // This code is contributed by bunnyram19.</script>
Vowel
Method 2 – using Bitmasking: Another approach is to check among multiple groups of values and then create a bitmask of the values and then check for that bit to be set.
Program 2:
C++
Java
Python3
C#
Javascript
// C++ program to compare a value// with multiple values#include <iostream>using namespace std; // Driver Codeint main(){    // Create bitmasks    unsigned group_1 = (1 << 1) | (1 << 2) | (1 << 3);    unsigned group_2 = (1 << 4) | (1 << 5) | (1 << 6);    unsigned group_3 = (1 << 7) | (1 << 8) | (1 << 9);     // Values to be checked    int value_to_check = 9;     // Checking with created bitmask    if ((1 << value_to_check)        & group_1) {        cout << "found a match in group 1";    }    if ((1 << value_to_check)        & group_2) {        cout << "found a match in group 2";    }    if ((1 << value_to_check)        & group_3) {        cout << "found a match in group 3";    }     return 0;}
// Java program to compare a value// with multiple valuesimport java.util.*;class GFG{ // Driver Codepublic static void main(String[] args){    // Create bitmasks    int group_1 = (1 << 1) |                  (1 << 2) | (1 << 3);    int group_2 = (1 << 4) |                  (1 << 5) | (1 << 6);    int group_3 = (1 << 7) |                  (1 << 8) | (1 << 9);     // Values to be checked    int value_to_check = 9;     // Checking with created bitmask    if (((1 << value_to_check) &          group_1) > 0)    {        System.out.print("found a match " +                         "in group 1");    }    if (((1 << value_to_check) &          group_2) > 0)    {        System.out.print("found a match " +                         "in group 2");    }    if (((1 << value_to_check) &          group_3) > 0)    {        System.out.print("found a match " +                         "in group 3");    }}} // This code is contributed by shikhasingrajput
# Python3 program to compare a value# with multiple values # Driver Codeif __name__ == '__main__':         # Create bitmasks    group_1 = (1 << 1) | (1 << 2) | (1 << 3)    group_2 = (1 << 4) | (1 << 5) | (1 << 6)    group_3 = (1 << 7) | (1 << 8) | (1 << 9)         # Values to be checked    value_to_check = 9         # Checking with created bitmask    if (((1 << value_to_check) & group_1) > 0):        print("found a match " + "in group 1")     if (((1 << value_to_check) & group_2) > 0):        print("found a match " + "in group 2")     if (((1 << value_to_check) & group_3) > 0):        print("found a match " + "in group 3") # This code is contributed by gauravrajput1
// C# program to compare a value// with multiple valuesusing System;class GFG{ // Driver Codepublic static void Main(String[] args){  // Create bitmasks  int group_1 = (1 << 1) |                (1 << 2) |                (1 << 3);  int group_2 = (1 << 4) |                (1 << 5) |                (1 << 6);  int group_3 = (1 << 7) |                (1 << 8) |                (1 << 9);   // Values to be checked  int value_to_check = 9;   // Checking with created  // bitmask  if (((1 << value_to_check) &        group_1) > 0)  {    Console.Write("found a match " +                  "in group 1");  }  if (((1 << value_to_check) &        group_2) > 0)  {    Console.Write("found a match " +                  "in group 2");  }  if (((1 << value_to_check) &        group_3) > 0)  {    Console.Write("found a match " +                  "in group 3");  }}} // This code is contributed by gauravrajput1
<script> // JavaScript program to compare a value// with multiple values // Create bitmasks    let group_1 = (1 << 1) |                  (1 << 2) | (1 << 3);    let group_2 = (1 << 4) |                  (1 << 5) | (1 << 6);    let group_3 = (1 << 7) |                  (1 << 8) | (1 << 9);      // Values to be checked    let value_to_check = 9;      // Checking with created bitmask    if (((1 << value_to_check) &          group_1) > 0)    {        document.write("found a match " +                         "in group 1");    }    if (((1 << value_to_check) &          group_2) > 0)    {        document.write("found a match " +                         "in group 2");    }    if (((1 << value_to_check) &          group_3) > 0)    {        document.write("found a match " +                         "in group 3");    }  // This code is contributed by unknown2108 </script>
found a match in group 3
Note: This approach works best for values that don’t exceed the natural size of your CPU. It would typically be 64 in modern times. The general solution to this problem using Template from C++11. Below is the program for the same:
Program 3:
C++
Python3
C#
// C++ program for comparing variable// with multiples variable#include <algorithm>#include <initializer_list>#include <iostream>using namespace std; template <typename T> // Function that checks given variable// v in the list lst[]bool is_in(const T& v,           std::initializer_list<T> lst){    return (std::find(std::begin(lst),                      std::end(lst), v)            != std::end(lst));} // Driver Codeint main(){    // Number to be compared    int num = 10;     // Compare with multiple variables    if (is_in(num, { 1, 2, 3 }))        cout << "Found in group" << endl;    else        cout << "Not in group" << endl;     // Character to be compared    char c = 'a';     // Compare with multiple variables    if (is_in(c, { 'x', 'a', 'c' }))        cout << "Found in group" << endl;    else        cout << "Not in group" << endl;     return 0;}
# Python program for above approachimport math # Function that checks given variable# v in the list lst[]def is_in(v, lst):    return v in lst  # Driver Code # Number to be comparednum = 10 # Compare with multiple variablesif (is_in(num, [1, 2, 3] )):    print("Found in group")else:    print("Not in group") # Character to be comparedc = 'a' # Compare with multiple variablesif (is_in(c,  ['x', 'a', 'c'] )):    print("Found in group")else:    print("Not in group") #This code is contributed by shubhamsingh10
// C# program for the above approachusing System;using System.Linq; public static class Extensions{         // Function that checks given variable    // v in the list lst[]    public static bool is_in<T>(this T[] array,                                T target)    {        return array.Contains(target);    }} class GFG{     // Driver Codestatic public void Main (){         // Number to be compared    int num = 10;    int [] arr = { 1, 2, 3 };         // Compare with multiple variables    if (arr.is_in(num))        Console.WriteLine("Found in group");    else        Console.WriteLine("Not in group");     // Character to be compared    char c = 'a';    char[] arr1 = { 'x', 'a', 'c' };         // Compare with multiple variables    if (arr1.is_in(c))        Console.WriteLine("Found in group");    else        Console.WriteLine("Not in group");}} // This code is contributed by shubhamsingh10
Not in group
Found in group
Note: It is not very efficient though when not used with primitive types. For std::string it will produce an error. This task became really easy with C++17, as it comes with Fold Expression. This is generally called Folding which helps to express the same idea with less code and it works well with any data type. Here, “||” operator to reduce all the Boolean results to a single one which is only False if all the comparison results False. Below is the program for the same:
Program 4:
C++
// C++ program for comparing variable// with multiple variables#include <algorithm>#include <initializer_list>#include <iostream>#include <string>using namespace std; template <typename First, typename... T> // Function that checks given variable// first in the list t[]bool is_in(First&& first, T&&... t){    return ((first == t) || ...);} // Driver Codeint main(){    // Number to be compared    int num = 10;     // Compare using template    if (is_in(num, 1, 2, 3))        cout << "Found in group" << endl;    else        cout << "Not in group" << endl;     // String to be compared    string c = "abc";     // Compare using template    if (is_in(c, "xyz", "bhy", "abc"))        cout << "Found in group" << endl;    else        cout << "Not in group" << endl;     return 0;}
Output:  
 
29AjayKumar
GauravRajput1
princi singh
shikhasingrajput
Rajput-Ji
bunnyram19
SoumikMondal
unknown2108
SHUBHAMSINGH10
C-Variable Declaration and Scope
Articles
C++
C++ Programs
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Docker - COPY Instruction
Time complexities of different data structures
SQL | DROP, TRUNCATE
Difference Between Object And Class
Implementation of LinkedList in Javascript
Vector in C++ STL
Map in C++ Standard Template Library (STL)
Initialize a vector in C++ (7 different ways)
std::sort() in C++ STL
Bitwise Operators in C/C++