To understand whether to use a straight or cross, I determine where in the TCP/IP Model each device fits. Devices which coexist in the same layer of the model need a crossover. Devices which do not exist within the same layer need a straight cable.
Thus, since Hubs/Bridges/Switches all exist in the Physical layer of the TCP/IP model, you must use a crossover to connect them together. Routers and PC's have meaningful IP addresses (switch IP addresses are for management only) therefore they exist in the Network layer. To connect a PC to a Router, you would need a crossover.
If you are not crossing between network and physical layer devices, you need to use a crossover. If you are crossing between network and physical, you do not need a crossover.