Ci sono diverse soluzioni, si può operare leggendo tutta la stringa e individuando due substring utilizzando la posizione dell'uguale come separatore, oppure utilizzando la funzione
get nelle varianti
istream& get (char* s, streamsize n, char delim);
istream& get (streambuf& sb, char delim);
che permettono di specificare il delimitatore; o ancora, se sei sicuro che nella stringa
chiave = valore ci sia sempre uno spazio prima e dopo l'uguale, operare come fai tu scartando la seconda variabile ottenuta.