2009-06-29 5 views
0

I Avoir une liste qui contient dbfile, chemins et j'ai besoin de les ajouter à une carte en ordre pour obtenir les valeurs correspondantes. ma liste contient des éléments que commeComment ajouter des éléments de la liste de la manière suivante?

star 
e:\data\star.mdf 
e:\data\star.ldf 
kiran 
e:\data\kiran.mdf 
e:\data\kiran.ldf 
hai 
e:\data\hai.mdf 
e:\data\hai.ldf  

Maintenant, je dois les insérer à alimenter une liste comme format spécifié

map<string,list<string>> 
    |   | 
    \/   \/ 
    databasename paths info 

comment puis-je faire cela.

Plz aider moi

Répondre

1

Vous pouvez écrire:

std::list tempList; 
tempList.push_back("e:\data\star.mdf"); 
tempList.push_back("e:\data\star.ldf"); 
m.insert(std::make_pair("star", tempList)); 

Notez cependant que le tempList sera copié lors de l'insertion. Vous pouvez considérer cela comme une surcharge de performances inacceptable, qui peut être résolue en utilisant un pointeur intelligent dans la liste. Par exemple:

std :: map >> m;

+0

j'ai base de données 100 comme ça comment faire pour 100 – Cute

+0

Ensuite, vous devrez mettre mon exemple de code dans une fonction d'assistance. –

+0

Comment faire cela un plz expliquer je n'ai aucune idée. – Cute

1

Lorsque vous lisez une chaîne, comme "star" (nous supposerons dans s), createa entrée de carte:

mymap.insert(std::make_pair(s, list <string>())); 

Maintenant, vous allez lire les noms de répertoire, en exemple d. Comme vous venez de créer l'entrée, il est sûr d'utiliser l'opérateur de carte []:

mymap[s].push_back(d); 
+0

Comment faire une boucle de 20 minutes en utilisant l'itérateur – Cute

+0

mettre le code que j'ai suggéré dans une boucle. –

+0

Quel est le problème? Itérer sur les données source et remplir la cible. – sharptooth

0

Je suppose que est ce que vous voulez faire: Vous devez passer par la ligne par ligne fichier à l'aide getline(), que vous convertissez le tampon que vous avez utilisé pour getline en une chaîne et vérifiez avec une expression régulière s'il s'agit d'un chemin ou d'un datbasename (vous pourriez rendre votre format de fichier plus explicite pour l'exprimer plus clairement ou utiliser XML). Ensuite, vous appelez la fonction appropriée à ajouter à la carte. En pseudocode avec l'hypothèse qu'il n'y a que des chemins par db:

infile.open(FILENAME);
while(infile.good()) {
getline(infile, buffer, blength)
string dbName = buffer
for(int i = 0; i < 2; i++) getline() and to string addStuffToMap();

Trop paresseux pour écrire une version de travail en ce moment ...

0

Qu'est-ce que vous avez besoin est une carte de noms (string) à une liste de chemins (chaîne). Tout ce que vous avez à faire est de déclarer exactement cela: std :: map < std :: string, std :: list < std :: string>>. Simple comme bonjour :-)

Essayez ceci:

#include <list> 
#include <map> 
#include <string> 


int main() 
{ 
    std::map<std::string,std::list<std::string> >  dbMap; 

    dbMap["star"].push_back("e:\data\star.mdf"); 
    dbMap["star"].push_back("e:\data\star.ldf"); 

    dbMap["kiran"].push_back("e:\data\kiran.mdf"); 
    dbMap["kiran"].push_back("e:\data\kiran.ldf"); 

    dbMap["hai"].push_back("e:\data\hai.mdf"); 
    dbMap["hai"].push_back("e:\data\hai.ldf"); 
} 
Questions connexes