キーとして演算子文字列を使用し、値として対応する比較操作用の関数オブジェクトを使用してマップを作成できます。
マップの作成:
std::map<std::string, boost::function<bool(int, int)> > ops;
ops["=="] = std::equal_to<int>();
ops["!="] = std::not_equal_to<int>();
ops[">"] = std::greater<int>();
ops["<"] = std::less<int>();
ops[">="] = std::greater_equal<int>();
ops["<="] = std::less_equal<int>();
それを使用する:
bool resultOfComparison = ops[str](salary[i], 9000);
(完全な実例については、このリンクを参照してください。)
編集:
@sbiが以下のコメントで述べたようにmap[key]
、キーが存在しなかった場合、を使用してマップにアクセスするとエントリが作成されます。したがって、it = map.find(key)
代わりに使用してください。map.end()
結果がキーと等しい場合は見つかりませんでした。それ以外の場合、値はit->second
です。このソリューションをニーズに適合させる際は、このことに注意してください。