Efficient ways to compare a variable with multiple values
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++
// C++ program to compare one variable // with multiple variable #include <iostream> using namespace std; // Driver Code int 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
// Java program to compare one variable // with multiple variable import java.util.*; class GFG { // Driver Code public 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 |
Python3
# Python program to compare one variable # with multiple variable # Driver Code if __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#
// C# program to compare one variable // with multiple variable using System; class GFG { // Driver Code public 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 |
Javascript
<script> // Javascript program to compare one variable // with multiple variable // Variable to be compared var character = 'a' ; // Compare the given variable // with vowel using || operator // Check for vowel if (character == ( 'a' . charCodeAt(0) || 'e' . charCodeAt(0) || 'i' . charCodeAt(0) || 'o' . charCodeAt(0) || 'u' . charCodeAt(0))) { document.write( "Vowel" ); } // Otherwise Consonant else { 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++
// C++ program to compare one variable // with multiple variable #include <iostream> using namespace std; // Driver Code int 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
// Java program to compare // one variable with multiple // variable import java.util.*; class GFG{ // Driver Code public 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
# Python3 program to compare # one variable with multiple # variable # Driver Code if __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#
// C# program to compare // one variable with multiple // variable using System; class GFG{ // Driver Code public 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 |
Javascript
<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++
// C++ program to compare a value // with multiple values #include <iostream> using namespace std; // Driver Code int 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
// Java program to compare a value // with multiple values import java.util.*; class GFG{ // Driver Code public 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
# Python3 program to compare a value # with multiple values # Driver Code if __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#
// C# program to compare a value // with multiple values using System; class GFG{ // Driver Code public 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 |
Javascript
<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++
// 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 Code int 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; } |
Python3
# Python program for above approach import 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 compared num = 10 # Compare with multiple variables if (is_in(num, [ 1 , 2 , 3 ] )): print ( "Found in group" ) else : print ( "Not in group" ) # Character to be compared c = 'a' # Compare with multiple variables if (is_in(c, [ 'x' , 'a' , 'c' ] )): print ( "Found in group" ) else : print ( "Not in group" ) #This code is contributed by shubhamsingh10 |
C#
// C# program for the above approach using 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 Code static 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 Code int 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: