変数と複数の値の効率的な比較
特定のシナリオでは、変数を複数のオプションに対して同時に比較することが必要になります。通常、開発者は OR 演算子に手を伸ばします。ただし、このアプローチはしばしば複雑な問題を引き起こします。
理想的な解決策
理想的には、次のコードで例示されるように、複数のグループを区別する便利な方法を模索します。
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
C 11 を使用したソリューションstd::initializer_list
C 11 では、std::initializer_list を使用して目的の機能を実現できます。 is_in テンプレート関数を定義することで、変数をオプションのセットと効率的に比較できます:
#include <algorithm> #include <initializer_list> template <typename T> bool is_in(const T& v, std::initializer_list<T> lst) { return std::find(std::begin(lst), std::end(lst), v) != std::end(lst); }
これにより、比較を簡潔に実行できます:
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17ソリューション: より効率的な
C 17 は高度に最適化されたソリューションを導入しましたこれはどの型でもうまく機能します:
template<typename First, typename ... T> bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } // ... // s1, s2, s3, s4 are strings. if (is_in(s1, s2, s3, s4)) // ...
このバージョンは、C 11 の対応物とは異なり、文字列のような複雑な型に対しても効率的なコードを生成します。
以上がC で変数を複数の値と効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。