Shunting-yard algorithm for expression parser
isInteger is not needed. Use std::isdigit.
Trust the logic. An else if condition is mutually exclusive with if condition. There is no need to test for it - you already know it is true. A simple else is enough. But see also the next point.
Notice that all code paths in the else clause necessarily push(c). Factor it out:

if ((stack.size() &gt; 0) {
    if ((op_precedence[stack_top()] &gt;= op_precedence[c])) {
        output.push_back(stack.top());
        stack.pop();
    }
}
stack.push(c);