2009-06-29 61 views
0

我有一个包含dbfile,路径的列表,我需要将它们添加到地图中以获取相应的值。 我的列表中包含的项目,如像如何以下列方式添加列表项目?

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  

现在我需要通过填充名单按规定格式

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

我怎么可以这样地插入。

PLZ帮我

回答

1

你可以写:

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

然而要注意的tempList将在插入被复制。您可能会认为这是一个不可接受的性能开销,可以通过使用指向列表的智能指针来解决。例如:

std :: map >> m;

+0

我有100个数据库一样,如何做到这一点的100 – Cute 2009-06-29 10:39:32

+0

然后,你得把我的示例代码中的辅助功能。 – 2009-06-29 10:41:35

1

当你读一个字符串,如“明星”(我们假设为s),createa映射条目:

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

现在,你将阅读目录名,到发言权d。正如你刚才创建的条目,它的安全使用地图的运算符[]:

mymap[s].push_back(d); 
0

我想这是你想要做什么: 你需要通过使用getline()文件中的行由行,将用于getline的缓冲区转换为字符串,并使用正则表达式检查它是否为路径或数据库名称(可能会使文件格式更加冗长,以便更清楚地表达或使用XML)。然后你调用适当的函数来添加到地图。 与所述假定伪代码,只有有每分贝路径:

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();

懒得现在写一个工作版本

0

你需要的是地图名称的(串)到路径列表(字符串)。你需要做的只是声明:std :: map < std :: string,std :: list < std :: string >>。容易馅饼:-)

试试这个:

#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"); 
} 
相关问题