1
votes

Comment créer la carte du vecteur de structure en c ++

J'ai une carte std :: map > maMap et ma structure est définie comme suit.

        struct Data
        {
         int x;
         int z;
         int y;
        };

dans La clé myMap est int et la valeur est le vecteur de la structure et je ne veux pas créer le vecteur ou la structure temporaire lors de l'insertion dans la carte. Y a-t-il une idée pour y parvenir?


1 commentaires

myMap [123] renvoie une référence au vecteur à cette clé (en le créant s'il n'existe pas), donc myMap [123] .push_back ({x, y, z}) ; doit ajouter {x, y, z} au vecteur nouvellement créé / existant sans utiliser de vecteur temporaire. Quelque chose comme onlinegdb.com/HJgoqrElkw


3 Réponses :


2
votes

Une méthode consiste à utiliser emplace et std::move

myMap.emplace(key, std::move(myVec));

En utilisant std :: move code> vous pouvez construire le vecteur en dehors de la carte, puis déplacer ce vecteur dans la carte sans aucune copie.


0 commentaires

1
votes

Comme la réponse précédente l'a dit, vous pouvez utiliser emplace et std :: move, mais pour tester si cela ou toute autre solution fonctionne, je vous suggère de remplacer le constructeur, le constructeur de copie, le destructeur et l'opérateur d'affectation pour afficher quelque chose comme créé, copié, détruit, attribué respectivement, pour que vous sachiez ce qui se passe réellement et améliorez les performances.


0 commentaires

1
votes

2 commentaires

Je ne veux pas créer d'objet supplémentaire du vecteur Je veux insérer directement dans la carte sans avoir aucun objet du vecteur. Mieux en utilisant la liste d'initialisation


Vous ne créez pas d'objet supplémentaire ici. Vous n'avez que l'objet qui est stocké dans la carte. "insérer directement sur la carte sans avoir aucun objet du vecteur" - désolé, pas sûr de ce que vous voulez dire ici, vous avez une carte avec std :: vector comme valeur, vous aurez toujours std :: vector stocké dans la carte, car c'est ainsi que vous l'avez déclaré.