carte de vecteurs dans la STL?
Je veux avoir une carte de vecteurs, (mais je ne veux pas utiliser un pointeur pour l'interne vecteur), est-il possible?
//define my map of vector
map<int, vector<MyClass> > map;
//insert an empty vector for key 10. # Compile Error
map.insert(pair<int, vector<MyClass> >(10, vector<MyClass>));
Je sais que si j'ai utilisé un pointeur pour vecteur, comme suit, ce serait bien, mais je me demande si je peux l'éviter à l'aide du pointeur et l'utilisation au-dessus de la structure de données (je ne veux pas supprimer manuellement)
//define my map of vector
map<int, vector<MyClass>* > map;
//insert an empty vector for key 10.
map.insert(pair<int, vector<MyClass>* >(10, new vector<MyClass>));
Vous devez vous connecter pour publier un commentaire.
La première structure de données fonctionne. Vous pourriez
typedef
une partie du code pour en faire le futur travail plus facile:ou (grâce quamrana):
Oui, mais votre deuxième ligne doit être:
Cela insère une paire composée de l'entier 10, et un vecteur vide. Les deux seront copiés, et si vous faites affaire avec de grands vecteurs alors vous aurez envie d'être prudent sur les copies.
Aussi: ne pas appeler les variables "carte" alors que
using namespace std
. Tu me fais peur 😉map.insert( std::make_pair( 10, vector<MyClass>() ) );
En utilisant les typedefs de fbrereton vous pouvez également le faire:
Vous pouvez utiliser
operator[]
au lieu deinsert().
Cela permet d'économiser sur le bruit de la ligne un peu.Utiliser la fonction de permutation pour ajouter efficacement votre vecteur.
Vous devriez lire les compiler des messages d'erreur. Habituellement, ils vous donne toutes les informations dont vous avez besoin.
Votre code provoque une erreur
'illegal use of this type as an expression'
dans cette chaîne. Cela signifie que vous utilisez le type, pas un objet. Pour utiliser un objet, vous pouvez simplement ajouter () pour appeler le constructeur sans arguments.Par la façon dont vous pourriez utiliser std::make_pair de créer des paires. Il en déduit les types d'argument, donc pas besoin d'indiquer explicitement eux.
Vous pouvez utiliser le bouton [] des opérateurs.
Ces va insérer la valeur dans la carte.
Si vous allez utiliser, peu après leur construction:
Maintenant ses construit et vous avez une référence à l'objet.
Permet d'utiliser un peu de c++11);)
Pour savoir si c'était insérée, vous pouvez le faire:
Et voici le phare de c++11 et cartes.... comment insérer dans cette carte une paire si il n'existe pas, et si elle existe il suffit d'insérer un nouvel élément dans le vecteur....
Je l'espère, de donner une information utile!!!
Vous manque juste une paire de parenthèses:
D'ailleurs, il y a une aide de la fonction std::make_pair qui prend soin de déduire les arguments de modèle:
Envisage d'utiliser un pointeur alloué dynamiquement vecteur lieu est plutôt une mauvaise idée, car cela vous rendra responsable de la gestion de l'instance. Aussi, puisque la carte ne doit jamais déplacer son contenu autour de la mémoire, il n'y a rien à gagner en terme de performance ni.
pousser des objets dans le vecteur de type Maclasse
accéder aux fonctions de membre à l'aide de vector_index