@MaM

Как коротко и эффективно записать if конструкцию для множества условий?

Есть if(key == y || key == x || key ==h || key == g .....), хочется писать как-то так (k in {y,x,h,g}). Или еше как, вообщем best practics. Я думал над итераторами, интересно может спомощью них как-то одной строкой, но тогда вопрос о производительности (сможет ли gcc) развернуть.
  • Вопрос задан
  • 251 просмотр
Решения вопроса 3
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Как-то так:
#include <set>
#include <iostream>
using namespace std;

int main() 
{
	const int alpha=301;
	
	if(set<int>{0,200,300,400}.count(alpha))
	{
		cout << "found" << endl;
	}
	else
	{
		cout << "not found" << endl;
	}
	
	return 0;
}


IDEONE


Производительность - логарифмическая от количества элементов. Если условие много раз проверяется, имеет смысл вынести set в отдельную константу.
Ответ написан
@sitev_ru
sitev.ru - мой блог ...
Можно так:
switch (key) {
case 1:
case 5:
case 10:
case 15:
  // делаем что-нибудь
}
Ответ написан
@saltydogd
std::list<std::wstring> keys = {};
std::wstring key = {};
    if (std::find(keys.begin(), keys.end(), key) != keys.end())
    {
       bool found = true;
    }

или расширить до std::find_if
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Вам платят за экономию строчек?
Как бы вы ни написали (хоть switch - case), в машинном коде все равно будут сравнения и ветвления.
Так что не заморачивайтесь с запихиванием этого в итераторы, а постарайтесь записать так, чтобы читалось беглым взглядом - и невозможно было сделать опечатку, которая тем же первым взглядом не выявлялась бы.

Кстати, компилятору тоже легче применять оптимизации, когда код пусть громоздок, но примитивен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы