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.注意这一点,同时根据您的需求调整此解决方案.