Para resolvê-lo, é conveniente usar uma função hash que retorna um valor único para cada linha (hash).
C++11 tem um recurso interno para obter um hash: hash.  < br /> No futuro, para contar o número de hashes, é melhor usar a tabela de hash unordered_map, que também apareceu no C++ 11. Você pode aprender mais sobre como usar o mapa no curso Estruturas de dados dinâmicos -> Arrays associativos: map.

Um exemplo de como obter um hash da string "test":

hash<string> hash_fn;
size_t str_hash = hash_fn("teste" );
cout<<str_hash;


O resultado será: "2949673445", portanto, de cada string exclusiva, você pode obter um hash exclusivo que pode ser usado como uma chave no mapa  unordered_map.

Criar hash em uma string é uma representação de uma string como um número único (assumiremos que a chance de colisão é insignificante) para cada string. Isso permite que você armazene quaisquer dados importantes (como senhas) no banco de dados não como strings, mas como números. Isso permite que você proteja as senhas se um invasor obtiver acesso ao banco de dados de senhas, porque ele não obterá as próprias senhas, mas apenas sua representação numérica, e é quase impossível obter uma string por seu hash (especialmente sem conhecer o algoritmo de hash ). 
Os hashes polinomiais são usados ​​com mais frequência em problemas de competição de programação.
Uma das melhores maneiras de determinar a função hash da string S é a seguinte:
h(S)  =  S[0]  +  S[1] * P  +  S[2] * P^2  +  S[3] * P^3  +  ...  +  S[N] * P^N