Large switch cascades are quicker to execute than branch statements, if you look at their structure in C/C++. Since cases in the switch can have only constant integer values (i.e. no ranges of values), the compiler can optimize the hell out of a switch statement. I also believe that switch statements can be supported at the hardware level (i.e. the assembly structure is very similar to the C/C++ syntax). Compilers can implement switches as table lookups or offsets, but branches have to be dealt with case by case.
The branch statement is faster than the switch statement if you're only dealing with one condition. This is because most modern CPU architectures support branch prediction, and a successful prediction does not waste any cycles. As you increase the number of cases, however, the benefits of branch prediction are only as good as the number of branch pipelines.
This is a generalization, BTW. If the language you're writing in supports ranges of values in the switch, the compiler may or may not optimize them well, or the switch may be syntactic (sp?) sugar for the branch statement.
EDIT: Just thought of a good analogy. Switches are like arrays, while branches are like linked lists.