basic idea behind inertia is to store a Vector2 of your 'Velocity' and a Vector2 of your current direction, every game loop, edit only your current direction vector, then add it to your velocity vector (Velocity += CurDirection) then, move your character by your velocity value(make sure to set a terminal velocity limit to avoid over speeding), where you got confused, is that when you apply your velocity to your character, you multiply the temporary value by the time
if you like looking at code more than reading (wrote this in the comment box, might not compile, but the idea is still there)
sf::Clock Timer;
Character Chary;
{// main loop
// get the time between a frame for use later on
float ElapsedTime = Timer.restart().asSeconds();
sf::Vector2<float> CurDirection;// a new CurDirection every time
// get wasd movements, and add them to CurDirection (which is now 0,0)
//SetVelocity and GetVelocity edit Character's velocity value
Chary.SetVelocity(Chary.GetVelocity() + (CurDirection*ElapsedTime) );
Chary.Move(Chary.GetVelocty());
}
Oh, and almost forgot, don't forget to make a drag value(float), and scale the vector by a negative of it's unit multiplied by your drag, and if the magnitude of the vector is lower than your drag, set it to 0,0 instead of applying the drag (otherwise will be jittery on stopping)