2010-07-11 6 views
2

Comment puis-je initialiser une chaîne de caractères dans une carte?Stringstream Post-Initialize à l'intérieur de la carte?

Est-ce encore possible ou dois-je créer une chaîne strings *?

std::map<std::string, std::stringstream> mapTopics; 

if(mapTopics.end() == mapTopics.find(Topic)) 
{ 
    mapTopics[Topic] = std::stringstream(""); // Post Initialize <--- 
} 

std::map<std::string, std::stringstream>::iterator mapTopicsIter = mapTopics.find(Topic); 
mapTopicsIter->second << " <say speaker=\"" << sSpeaker << "\">" << label << "</say>" << std::endl; 
+1

Que voulez-vous dire après l'initialisation? Que représente cet extrait de code? Je ne comprends pas vraiment ce que vous demandez. – SoapBox

+0

a ajouté un commentaire pour montrer ce que je veux dire. – Hendrik

Répondre

4

Comment puis-je post-initialiser un stringstream intérieur d'une carte?

Vous ne pouvez pas. Les conteneurs STL nécessitent que leurs éléments de données soient copiables et les flux ne sont pas copiables.

Pourquoi voulez-vous avoir des flux dans une carte? Tu ne peux pas stocker les chaînes?

Si vous êtes vraiment désespéré, vous devrez stocker des pointeurs vers des flux de chaîne (très probablement alloués dynamiquement):

std::map<std::string, std::shared_ptr<std::stringstream> > stream_map; 

Ceci a l'avantage que, auriez-vous stocker des pointeurs vers une classe de base de flux, vous pourrait plus tard également ajouter d'autres flux à la carte.

+0

Droit, oublié à ce sujet. – Klaim

+0

merci comme je thaugt; ( – Hendrik

0

Je ne sais pas si son que vous entendez, mais que diriez-vous:

std::stringstream ss; 
ss << "blablablabla"; 
ss.str("") /*Initialize*/