2017-04-21 1 views
0

J'ai besoin de la structure de données suivantes pour stocker des données:C la carte de carte de vecteurs en tant que membre de l'instance

std::map<int, std::map<unsigned long, std::vector<unsigned long> > > lifetime ; 

le map ci-dessus serait un membre d'instance d'une classe. La question est: ai-je besoin d'initialiser explicitement les conteneurs internes en utilisant new ou un constructeur quand j'y accède pour la première fois? par exemple:

if (this->lifetime[sm].find(address) == this->lifetime[sm].end()) { 
    (this->lifetime[sm])[address] = std::vector<unsigned long>() ; 
} 

je aussi ne semble pas comprendre les détails de la façon dont les vecteurs et les cartes sont initialisés en tant que membres de l'instance et imbriquées et je voudrais donc apprécier une explication de cela aussi.

Répondre

4

N'est pas nécessaire si vous utilisez operator[]. Lorsque operator[] est utilisé pour référencer un élément qui n'existe pas encore, une entrée est automatiquement créée, avec la valeur mapped_type initialisée.

+0

Donc quelque chose comme 'this-> durée de vie [sm] [adresse] .push_back (current_cycle);' sans initialisation préalable fonctionnerait? – DarthPaghius

+0

@parsoa l'essayer et voir. – xaxxon

+0

@xaxxon Eh bien, il semble que cela ne fonctionne pas et le vecteur doit être initialisé à l'avance, pourriez-vous expliquer pourquoi? – DarthPaghius