如何以下列方式添加列表项?

时间:2009-06-29 10:34:45

标签: c++ visual-c++

我有一个包含dbfile,路径的列表,我需要将它们添加到地图中以获取相应的值。 我的LIST包含类似

的项目
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帮帮我

4 个答案:

答案 0 :(得分: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 ::地图&GT;&GT;米;

答案 1 :(得分:1)

当你读到一个字符串,比如“star”(我们假设为s),创建一个地图条目:

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

现在你将阅读目录名,比如d。刚刚创建了条目,使用map的operator []:

是安全的
mymap[s].push_back( d );

答案 2 :(得分:0)

我想这就是你想要做的: 您需要使用getline()逐行浏览文件,而不是将用于getline的缓冲区转换为字符串,并使用正则表达式检查它是路径还是数据库名称(您可以使用文件格式更详细,以更清楚地表达或使用XML)。然后调用相应的函数添加到地图中。 在伪代码中假设每个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();

现在懒得写一个工作版......

答案 3 :(得分:0)

您需要的是名称(字符串)到路径列表(字符串)的映射。您需要做的就是声明:std :: map&lt; std :: string,std :: list&lt;的std :: string&GT;取代。馅饼很简单: - )

试试这个:

#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");
}