Intnato ti conviene passare i parametri per const reference visto che non li modifichi.
codice:
bool operator<(const Persona &P1, const Persona &P2){ return P1.get_Cognome()<P2.get_Cognome();}
Poi stai lavorando con puntatori, non con oggetti, per cui la tua funzione non verrà mai invocata (gli overload funzionano solo con oggetti, non con i puntatori).

Infine stai usando la versione sbagliata di std::sort().
La versione corretta è il secondo overload di quella funzione:
http://www.cplusplus.com/reference/algorithm/sort/
che prende in ingresso un predicato.

Ora non hai specificato che compilatore usi.
Se compatibile C++11 puoi usare una lambda function:
codice:
sort(VP.begin(),VP.end(), [] (const Persona* a, const Persona* b) -> bool { 
    return *a < * b; 
} );
Altrimenti usi un function objects o un puntatore a funzione come indicato nel link.
L'importante è ricordare che i parametri passati sono dei Persona*

E comunque preferibile usare un vector di shared_ptr invece che di puntatori raw. Si evitano memory leaks se non li deallochi alla fine.