Este SO responde que o Mapa STL com um Vetor para a Chave pode ser usado como chave. Então, quando usamos um vetor como chave. Como isso realmente funciona, uma vez que a chave precisa ser única e, quando inserirmos outro vetor com os mesmos elementos, a map
verificação de elemento duplicado por elemento ou o nome do vetor especificarão alguma coisa? Como o nome da matriz, representa o endereço base. Portanto, uma matriz pode ser usada como uma chave, pois o endereço base pode ser usado como uma chave nesse caso, mas qual é a chave no caso de um vetor. Como isso funciona internamente?
Porque quando imprimo o nome do vetor, recebo um erro
vector<int> v;
cout<<v; //error
has operators == and <
como isso ajuda? minha pergunta era para verificar elementos duplicados irá mapear comparar o elemento chave do vetor por elementostd::vector
como chave parastd::map
. Você paga pelo que usa . Isso pode ser feito e talvez haja alguns casos de uso para isso, mas certamente você pode alterar sua estrutura de dados de escolha. Os contêineres da STL foram projetados para serem maximamente versáteis e utilizáveis da maneira que o usuário desejar.std::map
copiará a chave e o valor em si.std::unordered_map
pode armazenar o hash da chave.Respostas:
Há um operador sobrecarregado <para o modelo de classe std :: vector.
isso é baseado no algoritmo padrão
std::lexicographical_compare
.Aqui está um programa demonstrativo.
Sua saída é
Portanto, a classe pode ser usada como uma chave no mapa.
Por padrão, o mapa do modelo de classe usa o objeto de função std :: less que, por sua vez, usa o operador <
No entanto, não há operador sobrecarregado << para o modelo de classe std :: vector.
fonte
O nome de um objeto e o conteúdo desse objeto são sempre coisas não relacionadas.
operator ==
poisstd::vector
primeiro comparará o comprimento dos vetores e, em seguida, cada um de seus elementos também será usadooperator ==
.operator <
compara elementos no vetor lexicograficamente, ou seja, ele retornax[i] < y[i]
para o primeiro elemento não igual em vetoresx
ey
.Estes são os requisitos
std::map
para um tipo usado comoKey
. Comostd::vector
satisfaz ambos, pode ser usado comoKey
. Observe que o tipo gerenciado por vetor também deve ter esses operadores sobrecarregados para que isso funcione (porquestd::vector
conta com esses operadores para implementar seus próprios operadores).fonte