Esta respuesta SO dice que el Mapa STL con un Vector para la Clave, el vector puede usarse como una clave. Entonces cuando usamos un vector como clave. ¿Cómo funciona eso realmente, ya que la clave debe ser única, de modo que cuando insertemos otro vector con los mismos elementos, la mapcomprobación de elementos duplicados por elemento o el nombre del vector especifica algo? Al igual que el nombre de la matriz representa la dirección base. Por lo tanto, una matriz se puede usar como una clave ya que la dirección base se puede usar como una clave en este caso, pero cuál es la clave en el caso de un vector. ¿Cómo funciona internamente?
Porque cuando imprimo el nombre del vector, obtengo un error
vector<int> v;
cout<<v; //error

has operators == and <¿Cómo ayuda eso? mi pregunta era verificar que los elementos duplicadosstd::vectorcomo clave parastd::map. Pagas por lo que usas . Se puede hacer, y tal vez hay algunos casos de uso para eso, pero ciertamente puede cambiar su estructura de datos de elección. Los contenedores STL están diseñados para ser lo más versátiles y utilizables de cualquier forma que el usuario quiera usar.std::mapcopiará tanto la clave como el valor en sí mismo.std::unordered_mappuede almacenar hash de la clave.Respuestas:
Hay un operador sobrecargado <para la plantilla de clase std :: vector.
eso se basa en el algoritmo estándar
std::lexicographical_compare.Aquí hay un programa demostrativo.
Su salida es
Entonces la clase se puede usar como clave en el mapa.
Por defecto, el mapa de plantilla de clase usa el objeto de función std :: less que a su vez usa el operador <
Sin embargo, no hay un operador sobrecargado << para la plantilla de clase std :: vector.
fuente
El nombre de un objeto y el contenido de ese objeto son siempre cosas no relacionadas.
operator ==forstd::vectorprimero comparará la longitud de los vectores y luego cada uno de sus elementosoperator ==también.operator <compara elementos en vector lexicográficamente, es decir, devuelvex[i] < y[i]el primer elemento no igual en vectoresxyy.Estos son los requisitos que
std::maptiene para un tipo utilizado comoKey. Comostd::vectorsatisface a ambos, puede ser usado por asKey. Tenga en cuenta que el tipo administrado por vector también debe tener estos operadores sobrecargados para que esto funcione (porquestd::vectordepende de esos operadores para implementar sus propios operadores).fuente