Эффективные способы сравнения переменной с несколькими значениями

Опубликовано: 5 Января, 2022

В этой статье мы обсудим способы сравнения переменной со значениями.

Метод 1. Идея состоит в том, чтобы сравнивать каждую переменную индивидуально со всеми множественными значениями одновременно.

Программа 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 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
Выход
 Согласный

Объяснение:
Приведенный выше код дает неправильный ответ или ошибку, так как сравнение переменных указанным выше способом неверно, и он вынужден кодировать следующим образом:

Метод 2 - использование битовой маски: Другой подход состоит в том, чтобы проверить несколько групп значений, а затем создать битовую маску значений, а затем проверить, установлен ли этот бит.

Программа 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 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
Выход
 нашел совпадение в группе 3

Примечание . Этот подход лучше всего работает для значений, не превышающих естественный размер вашего процессора. В наше время, как правило, было бы 64. Общее решение этой проблемы с использованием Template из C ++ 11. Ниже представлена программа для того же:

Программа 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;
}
Выход
 Не в группе
Найдено в группе

Примечание : это не очень эффективно, если не используется с примитивными типами. Для std :: string это вызовет ошибку. Эта задача стала действительно простой с C ++ 17, поскольку он поставляется с Fold Expression. Обычно это называется сворачиванием, которое помогает выразить ту же идею с меньшим количеством кода и хорошо работает с любым типом данных. Здесь «||» , чтобы свести все логические результаты к одному, который является ложным только в том случае, если все результаты сравнения ложны . Ниже представлена программа для того же:

Программа 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;
}

Выход:

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .