Se o vetor de criptografia é, por exemplo citado:
criptografa = {10,16,19,1,7,28,5,90,8,12,3,6,8,77,9};
e ele criptografa de 'a' até 'o', por exemplo, então a ordem dos elementos dele segue à das letras.
0 para 'a', 1 para 'b', 2 para 'c' etc...
Não precisa escrever as letras. Basta calcular os índices. Como?
Existe uma coisa chamada Tabela ASCII, que possui um valor para cada caracter.
Letras, ponto, vírgula, interrogação, #, !, $, @, & etc...
Para maiúsculas e minúsculas os valores são crescentes e na ordem.
'a' = 97.
A Linguagem C permite você escrever "subtração" de caracteres.
Se uma variável char possui valor 'g' e você subtrai uma variável com o valor 'a', ou o próprio 'a', você obterá a distâncias entre estas letras.
Quantas posições são de 'a' até 'g', se a posição 'a' for a posição zero?
Exatamente a que corresponde a posição da criptografia de 'g' no vetor.
Calcule o valor da distância e use ele no vetor de criptografia:
distancia = letra - 'a';
cout << (int) criptografa[distancia];
*** ADD ***
Mais uma coisa: Não se precisa saber o valor de 'a' na tabela.
Nem o de 'g'. Funciona e é a melhor parte.