逆波兰表达式

运用lambda表达式和包装器

150. 逆波兰表达式求值 - 力扣(LeetCode)

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
    stack<long long> s;
    map<string,function<long long(long long,long long)>> func=
    {
//包装四种情况函数(lambda表达式) {
"+",[](long long a,long long b){return a+b;}}, {"-",[](long long a,long long b){return a-b;}}, {"*",[](long long a,long long b){return a*b;}}, {"/",[](long long a,long long b){return a/b;}} }; for(auto& e:tokens) { if(func.count(e))//判断e是否存在map中 存在就是操作符 { long long right=s.top();//因为是栈 所以是先取到右 才能取到左 s.pop(); long long left=s.top(); s.pop(); s.push(func[e](left,right));//放入map里计算 } else//不存在就是操作数 { s.push(stoll(e));//操作数就放入栈内 } } return s.top(); } };

 

posted @ 2022-09-26 20:41  lemon-Breeze  阅读(10)  评论(0编辑  收藏  举报