Ce SO répond que la carte STL avec un vecteur pour la clé, le vecteur peut être utilisé comme clé. Donc, lorsque nous utilisons un vecteur comme clé. Comment cela fonctionne-t-il réellement puisque la clé doit être unique, donc lorsque nous insérons un autre vecteur avec les mêmes éléments, la map
vérification du doublon élément par élément ou le nom du vecteur spécifiera-t-il quelque chose? Comme le nom du tableau représente l'adresse de base. Ainsi, un tableau peut être utilisé comme clé puisque l'adresse de base peut être utilisée comme clé dans ce cas, mais quelle est la clé dans le cas d'un vecteur. Comment ça marche en interne.
Parce que lorsque j'imprime le nom du vecteur, j'obtiens une erreur
vector<int> v;
cout<<v; //error
has operators == and <
comment cela aide-t-il? ma question était de vérifier les éléments en double cartographieront comparer l'élément clé vecteur par élémentstd::vector
comme clé pourstd::map
. Vous payez pour ce que vous utilisez . Cela peut être fait, et il existe peut-être des cas d'utilisation pour cela, mais vous pouvez certainement changer la structure de données de votre choix. Les conteneurs STL sont conçus pour être polyvalents et utilisables au maximum de la manière dont les utilisateurs pourraient vouloir les utiliser.std::map
copiera la clé et la valeur en elle-même.std::unordered_map
peut stocker le hachage de la clé.Réponses:
Il existe un opérateur surchargé <pour le modèle de classe std :: vector.
qui est basé sur l'algorithme standard
std::lexicographical_compare
.Voici un programme démonstratif.
Sa sortie est
Ainsi, la classe peut être utilisée comme clé dans la carte.
Par défaut, la carte du modèle de classe utilise l'objet fonction std :: less qui à son tour utilise l'opérateur <
Cependant, il n'y a pas d'opérateur surchargé << pour le modèle de classe std :: vector.
la source
Le nom d'un objet et le contenu de cet objet sont toujours des choses sans rapport.
operator ==
forstd::vector
comparera d'abord la longueur des vecteurs, puis chacun de ses éléments en utilisantoperator ==
également.operator <
compare les éléments du vecteur lexicographiquement, c'est-à-dire qu'il renvoiex[i] < y[i]
le premier élément non égal dans les vecteursx
ety
.Ce sont les exigences
std::map
a pour un type utilisé commeKey
. Puisqu'ilstd::vector
satisfait les deux, il peut être utilisé par asKey
. Notez que le type géré par vector doit également avoir ces opérateurs surchargés pour que cela fonctionne (car ilstd::vector
dépend de ces opérateurs pour implémenter ses propres opérateurs).la source