Para solucionarlo, es conveniente utilizar una función hash que devuelva un valor único para cada fila (hash).
C++11 tiene una función integrada para obtener un hash: hash.  < br /> En el futuro, para contar el número de hashes, es mejor usar la tabla hash unordered_map, que también apareció en C++ 11. Puede obtener más información sobre el uso de mapas en el curso Estructuras de datos dinámicas -> Matrices asociativas: map.

Un ejemplo de cómo obtener un hash de la cadena "prueba":

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


El resultado será: "2949673445", por lo que de cada cadena única puede obtener un hash único que se puede usar como clave en el  unordered_map.

El hash de una cadena es una representación de una cadena como un número único (asumiremos que la posibilidad de una colisión es insignificante) para cada cadena. Esto le permite almacenar datos importantes (como contraseñas) en la base de datos no como cadenas, sino como números. Esto le permite proteger las contraseñas si un atacante obtiene acceso a la base de datos de contraseñas, ya que no obtendrá las contraseñas en sí, sino solo su representación numérica, y es casi imposible obtener una cadena por su hash (especialmente sin conocer el algoritmo hash). ). 
Los valores hash de polinomios se utilizan con mayor frecuencia en la programación de problemas de competencia.
Una de las mejores formas de determinar la función hash de la cadena S es la siguiente:
h(S)  =  S[0]  +  S[1] * P  +  S[2] * P^2  +  S[3] * P^3  +  ...  +  S[N] * P^N