For speed, what I do is having a clock (sf::Clock) to count the time of each frame. At the end of each frame the clock starts again.
So, I pass the elapsed time to the fuctions responsible of the movement, and multiply the movement speed by the time elapsed, as seconds. The result is the true movement value.
For example, let's say that the movement speed of your character is 100 (this is constant for your character). Let's say that the time of the frame is always 0.01 seconds, that is, 100 frames per second. So, your character's speed mutiplied by the time: 100 * 0.01 = 1, so each frame you move 1 pixel.
Now let's say that the frame rate is 50 FPS, that is, each frame last 0.02 seconds. 100 * 0.02 = 2, so your character moves 2 pixels per frame at 50 FPS.
So basically, at low FPS, your character moves faster each frame to compensate. At high FPS, your character moves slower. In real time, your character will need *almost* the same time to reach its destination, regardless if you are running the game at 10 FPS or 1000. Just make sure you do the multiplication each frame, because the time of the frames is never constant.
To test it, use Window.setFramerateLimit, and try with different FPS.
At least that's how I do it, and it works fine as far as I can tell. I don't know if there is better ways to do it, though.