codice:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

typedef struct rubrica{
        char cognome[15];
        char nome[15];
        char numero[20];
        }rubrica;
        
//rubrica riga[20];
//int vett[20];

rubrica riga[] = {
                {"b","",""},
                {"d","",""},
                {"a","",""},
                {"c","",""}
        };
  
int vett[] = {0, 1, 2, 3};

int scelta=0,a=0,cont=0,vuoto=0;
void inserimento(),stampa(),cerca(),modifica(),ordina();
char risp='s';


void inserimento()
{
     vuoto=1;
     do{
                  system("cls");
                  cout<<"Cognome:"<<" ";       cin>>riga[cont].cognome;
                  cout<<"Nome:"<<" ";           cin>>riga[cont].nome;
                  cout<<"Numero di telefono:"<<" ";                 cin>>riga[cont].numero;
                  cout<<"Vuoi inserire un altro elemento? (s/n)";
                  cin>>risp;
                  cont++;
                  }while(risp=='s');
                  system("cls");
                  a=cont;
                  }
                  
void stampa()
{
     for(cont=0; cont<a; cont++)
     {
                 cout<<"Cognome:"<<riga[vett[cont]].cognome<<endl;
                 cout<<"Nome:"<<riga[cont].nome<<endl;
                 cout<<"Numero di telefono:"<<riga[cont].numero<<endl;
                 }
                                              system("Pause");
                             system("cls");
                 }

void ordina()
{
int flag = 0;
	do {
		flag = 0;
		for(int k=0; k<a-1; k++)	{
			if(strcmp(riga[vett[k]].cognome, riga[vett[k+1]].cognome) > 0)   {
				int com = vett[k];
			        vett[k]= vett[k+1];
			        vett[k+1]= com;
			        flag=1;
			} 
		}
	} while(flag==1);

}
ho tolto la funzione modifica ,cerca e il main ( dalla risposta), però li potete vedere nel mio primo messaggio

così funziona, però come vedi ho commentato //rubrica riga[20]; //int vett[20]; e non ho commentato quelli che mi hai scritto te: se faccio il contrario non va