比较运算符

jon*_*ony 3 c++ vector comparison-operators

这可能是一个愚蠢的问题.有没有办法在运行时使用字符串变量给比较运算符.
假设我有一个向量的薪水数据.


vector < int > salary;
Input:
salary[i] != /* ==,>,<,>=,<= (any comparison operator)) */ 9000.

输入如上所述.我将比较运算符存储在字符串str中.str =(任何比较运算符).如果没有if和switch,有没有办法检查这样的话.


salary str 9000

mis*_*tor 15

您可以使用operator-strings作为键和函数对象创建一个映射,以便将相应的比较操作作为值.


创建地图:

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>(); 
Run Code Online (Sandbox Code Playgroud)

使用它:

bool resultOfComparison = ops[str](salary[i], 9000);
Run Code Online (Sandbox Code Playgroud)

(有关完整的工作示例,请参阅此链接.)


编辑:

正如@sbi在下面的评论中所说,map[key]如果密钥不存在,访问地图将创建一个条目.所以请it = map.find(key)改用.如果结果等于map.end()未找到密钥,否则值为it->second.注意这一点,同时根据您的需求调整此解决方案.