J'ai un std::map
appelé myMap
dans mon application C++ et je veux obtenir un élément en utilisant myMap.find(key)
ou myMap[key]
. Cependant, j'aimerais aussi obtenir l'index de cet élément sur la carte.
std::map<string, int> myMap;
// Populate myMap with a bunch of items...
myElement = myMap["myKey"];
// Now I need to get the index of myElement in myMap
Y a-t-il un moyen propre de le faire?
Je vous remercie.
Un std::map
n'a pas vraiment d'index, mais un itérateur pour une paire clé/valeur. Cela ressemble à un index en ce sens qu'il représente une position de tri dans la collection mais qu'il n'est pas numérique. Pour obtenir l'itérateur d'une paire clé/valeur, utilisez la méthode find
std::map<string, int>::iterator it = myMap.find("myKey");
Je suis venu ici pour chercher cette réponse mais j'ai trouvé cette fonction Distance prend 2 itérateurs et retourne un index
cout << distance(mymap.begin(),mymap.find("198765432"));
espérons que cela aide: D
Si votre carte est déjà corrigée (vous n'ajouterez/supprimerez aucune clé par la suite) et vous souhaitez en extraire un index. Vous pouvez faire ce qui suit:
Créez un tableau qui stocke les clés de votre carte entière. Et voilà, clés accessibles par index!
vector<int> keys;
for (pair<K,V> entry : yourMap) {
keys.Push_back(entry.first);
}
Et c'est tout. Pour accéder à un index i
de votre carte, utilisez yourMap[keys[i]]
L'avantage de cette méthode par rapport à la fonction distance
est la complexité temporelle. C'est O(1)
garanti.
Well - map conserve la clé et les données sous forme de paires Vous pouvez donc extraire les clés en séparant l’itérateur de la carte en paire ou directement dans son premier élément.
std::map<string, int> myMap;
std::map<string, int>::iterator it;
for(it=myMap.begin();it!=myMap.end();it++)
{
std::cout<<it->first<<std::endl;
}
La sémantique d'une carte n'inclut pas les index. Pour comprendre cela, vous pouvez noter que les cartes sont généralement implémentées sous forme d'arborescence. Par conséquent, les éléments qu’il contient n’ont pas d’indice (essayez de définir un index de manière naturelle pour un arbre).
Map est une structure de données clé-valeur qui contient en interne des données dans une arborescence. Il y a O(n) solution mentionnée ci-dessus . "Distance (mymap.begin (), mymap.find (" 198765432 "))" "ne vous apportera pas la réponse correcte . Pour vos besoins , vous devez créer votre propre structure de données de type arborescence de segments pour les opérations concurrentielles O log (n).
Il n’existe pas d’index dans une carte. Les cartes ne sont pas stockées (pas nécessairement, du moins; et en fait, elles ne figurent pas dans la plupart des implémentations) sous forme d'une séquence de "paires".
Quelle que soit l'implémentation, std :: map ne modélise pas un conteneur ayant un index.
En fonction de la raison pour laquelle vous posez cette question, l'index peut être un itérateur (comme suggéré par d'autres) ou la clé elle-même.
Cependant, cela semble étrange que vous ayez posé cette question. Si vous pouviez nous donner un peu plus de détails, nous serions probablement en mesure de vous indiquer une meilleure solution à votre problème.