Qual é a diferença entre getline e std :: istream :: operator >> ()?

#include <iostream>
#include <string>

using namespace std;

int main()
{
   string username;
   cout<< "username" ;
   cin >> username; 
}

Então, eu estava curioso sobre qual é a diferença entre esses dois códigos, ouvi dizer que é a mesma coisa, mas se é então por que duas maneiras de fazer isso?

#include <iostream>
#include <string>
using namespace std;

int main()
{  
   string username;
   cout << "username" ;
   getline (cin,username) ;
}

questionAnswers(5)

yourAnswerToTheQuestion