Velocity. For sure. It's how you should handle pretty much all movement (except for things like teleports).
- Have each entity keep a velocity vector (like an sf::Vector2f or whatever)
- Every logic update, add the velocity to the entity's position.
- When the player moves left/right, adjust their velocity, not their position. Perhaps implement some kind of maximum horizontal velocity to prevent them from moving too fast.
- To simulate gravity, just add a fixed value to their downward velocity every update. Once they are touching the ground, you can reset their vertical velocity to zero and stop applying gravity.
- To jump, check to see if the player is touching the ground. If they aren't, don't let them jump. If they are, just give them a sudden burst of upward velocity.
- If you want more advanced jump control, like where holding jump longer makes you jump higher, then you can make it so when the user lets go of the jump button, you kill any upward velocity (if they have any).